Это может показаться немного запутанным, поэтому я постараюсь сделать это кратким. По сути, мне нужно выполнить запрос, который группирует результаты на основе COL1
, и оттуда он смотрит на максимальное значение в COL2
. Как только он определит, какое наибольшее значение в COL2
, он должен посмотреть на значение в COL3
и затем извлечь каждую запись в группе, имеющую такое же значение. В таблице есть другие столбцы, из которых мне нужны значения, но они не используются в логике запроса.
SOME_TABLE
COL1 COL2 COL3
1 12345 100 A
2 12345 (null) A
3 12345 50 B
4 12346 0 A
5 12346 (null) A
6 12346 100 B
7 12346 20 B
Так что в этом примере для строк со значением COL1
, равным 12345
, я бы хотел строки 1
и 2
(ему просто нужен единственный экземпляр с самым высоким значением, не имеет значения, что остальные значения строк). Для COL1
со значением 12346
мне нужны строки с B
в COL3
.
Вот пример выходных данных в немного более удобочитаемом формате:
COL1 COL2 COL3
1 12345 100 A
2 12345 (null) A
6 12346 100 B
7 12346 20 B
Я пробовал множество различных запросов и перестановок запросов, но безуспешно. Я не уверен, насколько конструктивно было бы размещать кучу запросов, которые не работают. Два самых больших подхода, которые я пробовал, включают в себя регулярное выражение GROUP BY
, а также PARTITION BY
для COL1
.
Следует также отметить, что я пытался реализовать это на стороне приложения C#
, а также использовать циклы в сценарии SQL
, но результаты были либо смешанными, либо производительность была невероятно низкой.
Я не нашел ничего полезного в SO или в "документации" Oracle.