У меня возникла проблема, с которой я потратил много времени, пытаясь решить проблему, и хотя у меня есть решение, оно неудобно и включает обработку pl/sql, и мне было интересно, что другие могут придумать.Получение текущего и последнего предыдущего значения (Oracle)
Я работаю с набором данных, который создает новую строку при каждом изменении записи, тем самым сохраняя историю. В нашем приложении отображается самая современная версия. Рассмотрим таблицу со следующими данными:
Person ID Last_Name Address_line1 Effective_Start_Date Effective_End_Date 4913 Jones 1 First Street 03-aug-02 31-dec-12 4913 Cross 1 First Street 01-feb-02 02-aug-02 4913 Cross 86 Green Avenue 01-mar-01 31-jan-02 4913 Cross 87 Devonshire Road 01-jan-90 28-feb-02
В рамках доклада, мне нужно, чтобы извлечь детали, которые были изменены между заданным набором дат. Например, скажем, я хочу извлечь текущий address_line1
и предыдущий address_line1
вместе с датой изменения (effective_start_date
, когда был добавлен новый адрес). Предостережение заключается в том, что если другие данные столбца меняются, это также создаст новую строку. Например, в приведенном выше примере значение last_name
изменилось после изменения адреса.
К сожалению, запрос должен быть общим, чтобы он мог выполняться как часть отчета, т. Е. не указывая явно эффективные даты начала и окончания.
Надеюсь, что все имеет смысл. Надеюсь, ты все еще со мной. Таким образом, учитывая набор данных выше, я бы ожидал увидеть следующие результаты в своем докладе:
Person ID Surname Address_line1 Prev_Address_line1 Effective Start date of New Address Line 1 4913 Jones 1 First Street 86 Green Avenue 01-feb-02
Мой подход включает в себя обработку с помощью PL/SQL и циклы в течение значительного количества записей, но я, если это было интересно может выполняться в одном запросе sql.
Есть ли у кого-нибудь идеи, можно ли это сделать, используя только sql?