Запрос. Как сортировать временную таблицу?

По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
31. herfis 513 21.09.16 12:04 Сейчас в теме
(30) dmt, Если "первый" означает "с минимальным P1", тогда банально:
ВЫБРАТЬ
   Таблица.P2 КАК P2,
   МИНИМУМ(Таблица.P1) КАК P1
ИЗ
   МойТаблиц КАК Таблица
СГРУППИРОВАТЬ ПО
   Таблица.P2
УПОРЯДОЧИТЬ ПО
   P1
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
9. vovan_victory 65 21.09.16 11:09 Сейчас в теме
(1) dmt, а смысл ее сортировать? все равно ее результат ни кто не видит. Сортировать нужно конечный результат(ИМХО)
29. tarassov 113 21.09.16 11:56 Сейчас в теме
(1) dmt,
Если под "Временной таблицей" понимать то, с чем работает объект МенеджерВременныхТаблиц, то в языке запросов есть специальная фраза "ИНДЕКСИРОВАТЬ", например
|ВЫБРАТЬ
		|	Остатки.АналитикаУчетаПоПартнерам    КАК АналитикаУчетаПоПартнерам,
		|	Остатки.ЗаказПоставщику              КАК ЗаказПоставщику,
		|	Остатки.Валюта                       КАК Валюта,
		|	Остатки.Период                       КАК Период,
		|	Остатки.ДатаПлатежа                  КАК ДатаПлатежа,
		|	Остатки.НовыйКОплатеОстаток          КАК КОплатеОстаток,
		|	Остатки.КОплатеОстатокНаКонецПериода КАК КОплатеОстатокНаКонецПериода,
		|	Остатки.ПросроченнаяЗадолженность    КАК ПросроченнаяЗадолженность
		|ПОМЕСТИТЬ ТаблицаОстатковПоставщиков
		|ИЗ
		|	НовыеОстаткиПоставщиков КАК Остатки
		|ИНДЕКСИРОВАТЬ ПО
		|	АналитикаУчетаПоПартнерам,
		|	ЗаказПоставщику,
		|	Валюта
Показать
jan-pechka; user1296291; VickWood; +3 Ответить
2. DenisCh 21.09.16 10:46 Сейчас в теме
Зачем? И где?
Use case в студию.
3. dmt 67 21.09.16 10:51 Сейчас в теме
Есть у меня справочник с реквизитами: Р1 и Р2.
Хочу получить уникальные значения Р2 упорядоченные по значениям Р1.
14. alxarz 32 21.09.16 11:17 Сейчас в теме
(3) dmt, а если в запросе добавить РАЗЛИЧНЫЕ дубли убирать не придется.
4. DenisCh 21.09.16 10:57 Сейчас в теме
А зачем это делать во временной таблице?
5. dmt 67 21.09.16 11:01 Сейчас в теме
(4) DenisCh, ну не знаю...
Я придумал такой алгоритм:
- сортирую по P1
- убираю дубли
6. dj_serega 393 21.09.16 11:05 Сейчас в теме
(5) dmt, Мы точно о запросе разговариваем?
10. dmt 67 21.09.16 11:10 Сейчас в теме
7. herfis 513 21.09.16 11:09 Сейчас в теме
(5) dmt, Сортировать по P1, чтобы убрать дубли по P2... В запросе... Во временной таблице...
Чо-то мозг пошел вразнос на холостых оборотах. Пойду лучше поработаю.
8. alex-l19041 8 21.09.16 11:09 Сейчас в теме
(5) dmt, сначала выбрать различные Р1 во врем табл, затем внутр соединение со справочником по Р1 и упорядочивание по Р2
11. alex-l19041 8 21.09.16 11:10 Сейчас в теме
(8) alex-l19041, перепутал Р1 и Р2
13. dmt 67 21.09.16 11:14 Сейчас в теме
(8) alex-l19041, при внутреннем соединении уникальность же перестанет быть уникальной.
15. alex-l19041 8 21.09.16 11:18 Сейчас в теме
(13) dmt,
уникальность же перестанет быть уникальной
- поясните
17. dmt 67 21.09.16 11:24 Сейчас в теме
(15) alex-l19041, пример:

Исходная таблица из двух элементов с реквизитами:
Р1 = "А"
Р2 = 1

Р1 = "В"
Р2 = 1

Шаг 1: Выбор различных
Р2 = 1

Шаг 2: Внутр соед
Р1 = "А"
Р2 = 1

Р1 = "В"
Р2 = 1

Вернулись к исходной таблице.
21. alxarz 32 21.09.16 11:31 Сейчас в теме
(17) dmt, т.е. на выходе должны получить одну строку?
Р1 = "А"
Р2 = 1
23. dmt 67 21.09.16 11:34 Сейчас в теме
(21) alxarz, для данного примера да.
(22) SGordon1, предлагать.
27. vovan_victory 65 21.09.16 11:52 Сейчас в теме
(23) dmt, для примера из (17)

ВЫБРАТЬ
	"А" КАК Поле1,
	"1" КАК Поле2
ПОМЕСТИТЬ ВременнаяТаблица1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"В" КАК Поле1,
	"1" КАК Поле2
ПОМЕСТИТЬ ВременнаяТаблица2
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ВременнаяТаблица1.Поле1 КАК Поле1,
	ВременнаяТаблица1.Поле2 КАК Поле2
ИЗ
	ВременнаяТаблица1 КАК ВременнаяТаблица1
		ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблица2 КАК ВременнаяТаблица2
		ПО (ИСТИНА)
Показать


результат в скрине ниже
Прикрепленные файлы:
16. alxarz 32 21.09.16 11:21 Сейчас в теме
(13) dmt, и зачем внутреннее соединение при запросе двух полей из одной таблицы?
18. alex-l19041 8 21.09.16 11:25 Сейчас в теме
(16) alxarz, это временная таблица и весь справочник (можно и левое соединение по врем таблице)
19. dmt 67 21.09.16 11:26 Сейчас в теме
(16) alxarz, в (13) я отвечаю на (8).
12. vovan_victory 65 21.09.16 11:12 Сейчас в теме
(5) dmt, а убрать дубли можно через
ВЫБРАТЬ РАЗЛИЧНЫЕ
20. dmt 67 21.09.16 11:30 Сейчас в теме
Что бы не так скучно было.
22. SGordon1 21.09.16 11:32 Сейчас в теме
Индексировать не предлагать?
24. herfis 513 21.09.16 11:42 Сейчас в теме
Еще сотня постов и постановка задачи будет сформулирована! Ну, я на это надеюсь.
25. dmt 67 21.09.16 11:47 Сейчас в теме
(24) herfis, в (3) описана задача. Хочу решить ее запросом. Что непонятно?
28. herfis 513 21.09.16 11:53 Сейчас в теме
(25) dmt, Непонятно, например, что делать с одинаковыми P2, которым соответствуют различные P1
26. fomstas 21.09.16 11:52 Сейчас в теме
Может как-то так.
ВЫБРАТЬ
	РРР.поле1
ПОМЕСТИТЬ ййй
ИЗ
	Справочник..... КАК РРР
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ППП.Поле2
ПОМЕСТИТЬ ывывыв
ИЗ
	Справочник......КАК ППП
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ывывыв.Поле2,
	ййй.поле1
ИЗ
	ййй КАК ййй,
	ывывыв КАК ывывыв
	
УПОРЯДОЧИТЬ ПО
	поле1
Показать
30. dmt 67 21.09.16 12:01 Сейчас в теме
(26) fomstas, не то.

(27) vovan_victory, в результате всегда будет первая таблица.

(28) herfis, вывести только один. Первый.

(29) tarassov, я слышал про эту специальную фразу.
31. herfis 513 21.09.16 12:04 Сейчас в теме
(30) dmt, Если "первый" означает "с минимальным P1", тогда банально:
ВЫБРАТЬ
   Таблица.P2 КАК P2,
   МИНИМУМ(Таблица.P1) КАК P1
ИЗ
   МойТаблиц КАК Таблица
СГРУППИРОВАТЬ ПО
   Таблица.P2
УПОРЯДОЧИТЬ ПО
   P1
Показать
32. dmt 67 21.09.16 12:13 Сейчас в теме
(31) herfis, похоже на правду. Щас потестю.
33. alxarz 32 21.09.16 12:13 Сейчас в теме
(31) herfis, наверное всётаки "с минимальным P1" которому есть соответствие P2, а не из всей таблицы.
для случая
Р1 = "А"
Р2 = 1

Р1 = "В"
Р2 = 2

вернётся
Р1 = "А" Р2 = 1
Р1 = "А" Р2 = 2
а должна исходная таблица :)
34. dmt 67 21.09.16 12:19 Сейчас в теме
35. herfis 513 21.09.16 12:21 Сейчас в теме
(34) dmt, Да не за что :) Как-то не верилось, что задача такая простая, учитывая нечеткую ее постановку.
36. dmt 67 21.09.16 12:35 Сейчас в теме
(35) herfis, вроде старался в (3) как можно проще описать ситуацию.
Аж самому интересно стало как ее можно было описать более понятно.
37. herfis 513 21.09.16 13:00 Сейчас в теме
(36) dmt, Не, в (3) нормально. Если б ты с "сортировки временных таблиц" сначала не зашел :) Такая формулировка сама по себе недоумение вызывает, плюс слабо относится к сути проблемы - в итоге ищешь какой-то подвох.
38. Dipod 114 30.10.19 10:50 Сейчас в теме
Внезапно сейчас обнаружил, что при помещении данных во временную таблицу с индексированием по полю, платформа сортирует эти данные по этому полю. Также, теперь есть функция АВТОНОМЕРЗАПИСИ() которая нумерует данные по порядку при помещении во временную таблицу, что даёт возможность нам независимо отсортировать поля таблицы и связать их потом по номеру. Вот пример:

ВЫБРАТЬ
	1 КАК ДеньП,
	10 КАК ДеньФ
ПОМЕСТИТЬ Данные

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1,
	11

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	15,
	30

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1,
	30

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1,
	31

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2,
	10

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2,
	11

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2,
	30

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2,
	31

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	14,
	10

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	14,
	11

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	14,
	30

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	14,
	31

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	15,
	10

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	15,
	11

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	15,
	31
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	Данные.ДеньП КАК ДеньП,
	АВТОНОМЕРЗАПИСИ() КАК ПорядковыйНомер
ПОМЕСТИТЬ УпорядоченныеДниП
ИЗ
	Данные КАК Данные

ИНДЕКСИРОВАТЬ ПО
	ДеньП
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	Данные.ДеньФ КАК ДеньФ,
	АВТОНОМЕРЗАПИСИ() КАК ПорядковыйНомер
ПОМЕСТИТЬ УпорядоченныеДниФ
ИЗ
	Данные КАК Данные

ИНДЕКСИРОВАТЬ ПО
	ДеньФ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	УпорядоченныеДниП.ДеньП КАК ДеньП,
	УпорядоченныеДниФ.ДеньФ КАК ДеньФ
ИЗ
	УпорядоченныеДниП КАК УпорядоченныеДниП
		ПОЛНОЕ СОЕДИНЕНИЕ УпорядоченныеДниФ КАК УпорядоченныеДниФ
		ПО УпорядоченныеДниП.ПорядковыйНомер = УпорядоченныеДниФ.ПорядковыйНомер
Показать
39. dhurricane 30.10.19 10:56 Сейчас в теме
(38)
при помещении данных во временную таблицу с индексированием по полю, платформа сортирует эти данные по этому полю
Извините, но почему Вы решили, что это побочный эффект индексирования?
40. Dipod 114 30.10.19 11:15 Сейчас в теме
(39)Внезапно наткнулся на этот эффект. Так что это не точно. Я выполнял индексирование, а потом просматривал содержимое временной таблицы. И данные там реально были отсортированы. Проверял это только на числовых данных. И в файловой базе. Не уверен, что на SQL сервере эффект повторится.
41. romkus 05.12.20 13:26 Сейчас в теме
(40) Эффект существует, но похоже что это не совсем сортировка, а какое-то побочное явление при создании индекса. Когда записей немного - на вид они отсортированы, но когда их несколько тысяч то начинают встречаться "недосортированные" вставки. Так что создать индекс не значит отсортировать саму временную таблицу в запросе.
yak127; vinokurovey; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот