Рассмотрим эти данные:
ID Year Code1 Code2
-------- -------- -------- --------
ABC123 99/00 10010 A1121
ABC123 00/01 10010 A1131
ABC123 01/02 10010 A1141
XYZ567 06/07 12501 B2213
XYZ567 07/08 12501 B2223
Эти четыре поля составляют первичный ключ, и мне нужно найти самое раннее вхождение каждого экземпляра ID
с тремя другими ключами.Итак, в этом случае я хотел бы:
ID Year Code1 Code2
-------- -------- -------- --------
ABC123 99/00 10010 A1121
XYZ567 06/07 12501 B2213
В Oracle мое текущее решение состоит в том, чтобы агрегировать по четвертому символу Code2
, который является индексом года, и возвращать минимум, а затем перекомпоновыватьключ (т. е. изменяющаяся Year
часть);однако, это, очевидно, неоднозначно, и может не отображаться один на один.(Кроме того, этот метод медленный!) Порядок не будет работать, потому что, как правило, в ID
будет несколько значений, а Year
не включает в себя столетие.
Я думалчто, возможно, я мог бы сделать подзапрос для каждого ID
, а затем сделать заказ и выбрать первый элемент (то есть ROWNUM=1
).Тем не менее, это требует как минимум двух уровней подзапроса и, таким образом, является одновременно неловким и медленным ... Итак, какие-нибудь лучшие идеи ?!Спасибо:)