簡體   English   中英

我應該如何處理 Oracle 中每個地址更改的開始和結束日期?

[英]How Should I handle this Start and End Date for each address changes in Oracle?

我請求在 Oracle 表中生成包含以下數據的報告:只是成員的示例。

MEMBER_ID  START_DATE   END_DATE    ADDRESS1          ADDRESS2   CITY         STATE    LAST_UPDATED 
12345      1/1/2019     12/31/9999  1 Test Ave        Apt 111    City         AA       3/4/2020
12345      1/1/2019     12/31/9999  2 Test Dr         Apt 222    City         AA       9/5/2019
12345      1/1/2019     12/31/9999  1 Test Ave        APT 111    City         AA       6/3/2019
12345      1/1/2019     12/31/9999  3 Test TRL                   City         AA       3/3/2019

我希望將其作為上述數據報告的輸出:

MEMBER_ID  START_DATE   END_DATE    ADDRESS1          ADDRESS2   CITY         STATE    LAST_UPDATED
12345      10/1/2019    12/31/9999  1 Test Ave        Apt 111    City         AA       3/4/2020
12345      7/1/2019     9/30/2019   2 Test Dr         Apt 222    City         AA       9/5/2019
12345      4/1/2019     6/31/2019   1 Test Ave        APT 111    City         AA       6/3/2019
12345      1/1/2019     3/31/2019   3 Test TRL                   City         AA       3/3/2019

有人能幫忙解決這個問題嗎? 我嘗試了 Dense_rank 但就是想不出一個可以正常工作的邏輯。 就像如果成員有另一個地址更改,我也需要在報告中提取最新更改。

您似乎希望記錄在last_updated列的月份的最后一天結束。 然后next然后在第二天開始。

這可以使用lag()輕松處理:

select t.*,
       ( lag(last_day(last_updated)) over (partition by member_id order by last_updated) +
         interval '1' day
       ) as new_start_date,
       last_day(last_updated) as new_end_date
from t;

我認為您需要上次更新日期的季度開始和結束日期作為開始和結束日期。

Select member_id,
       Trunc(last_updated,'Q') as start_date,
       case 
          when extract(month from Trunc(last_updated,'Q')) = 12
          then end_date 
          else Add_months(Trunc(last_updated,'Q'), 3) - 1 
       end as end_date,
       .....
  From your_table

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM