Рассмотрим следующий минимальный пример:
SQL> select key1, key2, key3, hour from teste_jm;
KEY1 KEY2 KEY3 HOUR
---------- ---------- ---------- -----
26 992296089 1504 12:30
26 992296089 1275 13:30
Я бы хотел исключить запись, где KEY3 равен 1275, потому что ее ЧАС больше, чем у записи, где KEY3 равен 1504.
Я попробовал следующее, но безуспешно (я ожидал, что KEY4 будет 1504):
SQL> select key1, key2, key3, hour, min(key3) over (partition by key1, key2, key3 order by to_date(hour, 'HH24:MI')) key4 from teste_jm;
KEY1 KEY2 KEY3 HOUR KEY4
---------- ---------- ---------- ----- ----------
26 992296089 1275 13:30 1275
26 992296089 1504 12:30 1504
По сути, в Oracle 11g я хотел бы сохранить только записи, чей час самый ранний , для той же пары KEY1, KEY2.
Как бы я это сделал?
РЕДАКТИРОВАТЬ: Вот более полный пример:
SQL> select * from teste_jm;
KEY1 KEY2 KEY3 HOUR
---------- ---------- ---------- -----
27 993334444 1 23:00
27 993334444 2 23:59
26 992296089 1504 12:30
26 992296089 1275 13:30
Требуемый вывод для вышеперечисленного:
KEY1 KEY2 KEY3 HOUR
---------- ---------- ---------- -----
27 993334444 1 23:00
26 992296089 1504 12:30
SQLFiddle, содержащий примеры данных здесь .