Выбрать в запросе одну запись из нескольких

FastCode 314 2 6 20

Имеется таблица, содержащая, например, колонки Ф, К1, К2, К3, К4. Для каждого значения Ф в таблице может быть несколько записей.

t4.png

Требуется получить таблицу, включающую по одной (любой) записи для каждого значения Ф.

t5.png

Несмотря на простоту формулировки, у задачи нет простого решения, если только не использовать коррелированный запрос. С использованием коррелированного запроса решение получается очень простым:

ВЫБРАТЬ РАЗЛИЧНЫЕ Ф, К1, К2, К3, К4
ИЗ Дано
ГДЕ (Ф, К1, К2, К3, К4) 
В (ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ Дано КАК ВСЁ ГДЕ ВСЁ.Ф = Дано.Ф)

При использовании коррелированных запросов нельзя забывать о подводных камнях этого механизма, в частности о том, что он может служить причиной падения производительности запроса. Кроме того, в некоторых версиях файлового варианта условие ГДЕ из-за ошибки платформы 8.2 не срабатывает.

Автор: ildarovich

FastCode - сервис для программистов 1С

Похожие публикации

Срез на даты за период. Шаблон запроса

ВыбратьИсполнителя (БСП)

Остатки на каждый день

Движения периодического регистра сведений без повторов

Ограничение, одним видом документов, запроса из регистра

Модератору