powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с сортировкой при выполнении select c функцией
10 сообщений из 10, страница 1 из 1
Проблема с сортировкой при выполнении select c функцией
    #38683924
alexfess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос который выполняет некоторую функцию. Нужно чтобы функция выполнялась в порядке сортировки по номерам квартир.
Запрос выводит сортировку как надо, но результат выполнения функции показывает, что функция выполнялась не в порядке сортировки а как придется. Запрос такой:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT basa2.tbkv.kv_number,basa2.tbkv.kv_id,basa2.tbkv.kolvo_output,
basa2.f_tbzadan_add(2, 23, now()::date, 163, basa2.tbkv.kv_id)

FROM basa2.tbkv  
where kv_id in (
		SELECT basa2.tbkv.kv_id--, kv_number, basa2.tbkv.kolvo_output, count(basa2.tbdevice.device_id) as kolvo 
		FROM basa2.tbkv 
		left join basa2.tbzadan on basa2.tbzadan.kv_id = basa2.tbkv.kv_id and result_id  = 23 
		join basa2.tbdevice  on basa2.tbdevice.kv_id = basa2.tbkv.kv_id 
		JOIN basa2.tbmarka ON tbmarka.marka_id = tbdevice.marka_id 
		JOIN basa2.tbclass ON tbclass.class_id = tbmarka.class_id 
		JOIN basa2.tbclass_group ON tbclass_group.class_group_id = tbclass.class_group_id AND tbclass_group.class_group_id <> 0 
		left join basa2.tbdevice_stopper on basa2.tbdevice_stopper.device_id = basa2.tbdevice.device_id and  removed = false 
		where obslug = true and basa2.tbkv.tech_obslug=false and result_id is null and 
		(history = false or removed =false) and house_id = 2263
		group by basa2.tbkv.kolvo_output,kv_number,basa2.tbkv.kv_id 
		ORDER BY basa2.tbkv.kolvo_output,basa2.tbkv.kv_number,basa2.tbkv.kv_id
		limit case when (70 - basa2.f_kolvo_list_zadan_na_rukah(163)) < 0 then  0 
		else (70 - basa2.f_kolvo_list_zadan_na_rukah(163)) end
		
) ORDER BY basa2.tbkv.kv_number,basa2.tbkv.kv_id,basa2.tbkv.kolvo_output



Результат:

kv_number kv_id kolvo_output f_tbzadan_add
001 88004 0 573647
002 91030 0 573649
003 91031 0 573646
004 91033 0 573648
005 91032 0 573645

Подскажите пожалуйста, что я не так делаю.
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38683991
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexfess,

порядок выполнения в SQL не гарнтируется никак...
т.е. на plain sql в общем случае с гарантией вы это никак не сделалаете..

пишите еще одну хранимку с циклом по запросу
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38684020
alexfess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. делать хранимку в которой запрос выполняется по 1 строчке или мудрить что то с курсорами?
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38684045
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexfess,

первое... курсоры там не нужны
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38684155
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может создать функцию с атрибутом WINDOW ? тогда порядок сортировки можно задать явно....
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38684162
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexfess,

у вас функция генерирует результат, а как известно, order by применяется в самом конце, к результату select. Другими словами ваша функция выполняется до order by. Используйте подзапрос с order by, и уже к нему применяйте свою функцию.
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38684171
дык этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость_0alexfess,

у вас функция генерирует результат, а как известно, order by применяется в самом конце, к результату select. Другими словами ваша функция выполняется до order by. Используйте подзапрос с order by, и уже к нему применяйте свою функцию.не, это не кошерно, хотя может и сработать.

кошерно написать агрегат, и как window-function с order by-ем запулить.
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38684235
alexfess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость_0, добился сортировки по kv_id перепробовал вагон вариантов, но так и не получилось отсортировать по номеру КВ. В целом я понял в чем проблема, но как ее решить подзапросом не дотумкал :) Сейчас пишу хранимку с циклом хочу так попробовать.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SELECT basa2.tbkv.kv_number,
basa2.tbkv.kv_id,
fun2
--,basa2.tbkv.kolvo_output


FROM basa2.tbkv  
join (select kv.kv_number, kv.kv_id, basa2.f_tbzadan_add(2, 23, now()::date, 163, kv.kv_id) as fun2 from basa2.tbkv as kv 
where kv.house_id = 2263 order by kv.kv_number) as fun on
fun.kv_id = basa2.tbkv.kv_id
where basa2.tbkv.kv_id in (
		SELECT basa2.tbkv.kv_id--, kv_number, basa2.tbkv.kolvo_output, count(basa2.tbdevice.device_id) as kolvo 
		FROM basa2.tbkv 
		left join basa2.tbzadan on basa2.tbzadan.kv_id = basa2.tbkv.kv_id and result_id  = 23 
		join basa2.tbdevice  on basa2.tbdevice.kv_id = basa2.tbkv.kv_id 
		JOIN basa2.tbmarka ON tbmarka.marka_id = tbdevice.marka_id 
		JOIN basa2.tbclass ON tbclass.class_id = tbmarka.class_id 
		JOIN basa2.tbclass_group ON tbclass_group.class_group_id = tbclass.class_group_id AND tbclass_group.class_group_id <> 0 
		left join basa2.tbdevice_stopper on basa2.tbdevice_stopper.device_id = basa2.tbdevice.device_id and  removed = false 
		where obslug = true and basa2.tbkv.tech_obslug=false and result_id is null and 
		(history = false or removed =false) and house_id = 2263
		group by basa2.tbkv.kolvo_output,kv_number,basa2.tbkv.kv_id 
		ORDER BY basa2.tbkv.kolvo_output,basa2.tbkv.kv_number,basa2.tbkv.kv_id
		limit case when (70 - basa2.f_kolvo_list_zadan_na_rukah(163)) < 0 then  0 
		else (70 - basa2.f_kolvo_list_zadan_na_rukah(163)) end
		
) ORDER BY basa2.tbkv.kv_number
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38684705
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexfess,

вот так не получается?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 select *, basa2.f_tbzadan_add(2, 23, now()::date, 163, x.kv_id)
from (SELECT basa2.tbkv.kv_number,basa2.tbkv.kv_id,basa2.tbkv.kolvo_output

FROM basa2.tbkv  
where kv_id in (
		SELECT basa2.tbkv.kv_id--, kv_number, basa2.tbkv.kolvo_output, count(basa2.tbdevice.device_id) as kolvo 
		FROM basa2.tbkv 
		left join basa2.tbzadan on basa2.tbzadan.kv_id = basa2.tbkv.kv_id and result_id  = 23 
		join basa2.tbdevice  on basa2.tbdevice.kv_id = basa2.tbkv.kv_id 
		JOIN basa2.tbmarka ON tbmarka.marka_id = tbdevice.marka_id 
		JOIN basa2.tbclass ON tbclass.class_id = tbmarka.class_id 
		JOIN basa2.tbclass_group ON tbclass_group.class_group_id = tbclass.class_group_id AND tbclass_group.class_group_id <> 0 
		left join basa2.tbdevice_stopper on basa2.tbdevice_stopper.device_id = basa2.tbdevice.device_id and  removed = false 
		where obslug = true and basa2.tbkv.tech_obslug=false and result_id is null and 
		(history = false or removed =false) and house_id = 2263
		group by basa2.tbkv.kolvo_output,kv_number,basa2.tbkv.kv_id 
		ORDER BY basa2.tbkv.kolvo_output,basa2.tbkv.kv_number,basa2.tbkv.kv_id
		limit case when (70 - basa2.f_kolvo_list_zadan_na_rukah(163)) < 0 then  0 
		else (70 - basa2.f_kolvo_list_zadan_na_rukah(163)) end
		
) ORDER BY basa2.tbkv.kv_number,basa2.tbkv.kv_id,basa2.tbkv.kolvo_output) x
...
Рейтинг: 0 / 0
Проблема с сортировкой при выполнении select c функцией
    #38687933
alexfess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо се получилось
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с сортировкой при выполнении select c функцией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]