У меня есть блок данных, как это:Возврат только первый элемент из соответствующей группы
RW | PK A B C D
============================
1 | 1 aa 123 x 99
2 | 2 aa 234 v 98
3 | 3 bb 321 z 11
4 | 4 bb 210 w 91
5 | 5 cc 456 y 55
Как я могу захватить только первый элемент каждого набора (опознали по колонке А), как так?
RW | A B C D
=======================
1 | aa 123 x 99
2 | bb 321 z 11
3 | cc 456 y 55
Я могу GROUP BY
или использовать DISTINCT
, но это очень неэффективно с тем, что я смотрю на, во время работы прямой список занимает меньше 100msecs. Два вышеупомянутых параметра также могут выдавать более одного экземпляра экземпляра элемента в столбце A, поскольку соответствующие значения могут отличаться.
Другими словами,
SELECT MYTABLE.A, MYTABLE.D, MYTABLE.D, MYTABLE.D
FROM MYTABLE
очень быстро (менее чем за секунду), в то время как
SELECT MYTABLE.A, MYTABLE.D, MYTABLE.D, MYTABLE.D
FROM MYTABLE
GROUP BY MYTABLE.A, MYTABLE.D, MYTABLE.D, MYTABLE.D
и
SELECT DISTINCT MYTABLE.A, MYTABLE.D, MYTABLE.D, MYTABLE.D
FROM MYTABLE
занимает гораздо больше количество времени (минуты , но я не позволил ему закончить).
Мне не нужны агрегированные функции (COUNT
, SUM
и т. Д.), Просто листинг, один раз за элемент. Количество вхождений на значение в столбце А меняется, поэтому я не могу просто захватить каждую строку x.
Почему я просто не запускаю список и не использую Excel или что-то в этом роде? Я смотрю несколько миллионов записей, которые нужно вернуть, и я не могу обрабатывать так много записей, используя любое программное обеспечение, с которым я знаком.
Это выглядит, как он будет возвращать правильные результаты, но это по-прежнему занимает значительное количество времени, чтобы выполнить , Возможно, я прошу слишком много, но есть ли более быстрый метод? – Gaffi
@ Gaffi - Что означает «значительное количество времени»? Предположительно, Oracle придется выполнять полное сканирование таблицы (или полное сканирование индекса покрытия в зависимости от выбранных столбцов), и будет некоторая сортировка. Если запрос вернет миллионы строк, это означает, что таблица содержит десятки миллионов строк, поэтому сканирование таблицы вряд ли будет мгновенным. С другой стороны, если таблица имеет размер в несколько ГБ, для выполнения запроса не должно хватить нескольких часов, если у вас нет серьезных проблем ввода-вывода. –
Я имею в виду «существенный» в том, что прямая тяга всех записей меньше секунды, но группировка/сортировка занимает минуты. Я запускаю запрос сейчас, и я не знаю, сколько времени это займет в целом, но я обновлю его, когда это будет сделано. – Gaffi