簡體   English   中英

難住了。?! Teradata SQL。 如何隨着時間的推移重復組從歷史表中提取每個組更改的 MIN/MAX 值?

[英]Stumped!!! Teradata SQL. How do I pull MIN/MAX values from a history table for each group change with repeating groups over time?

我正在從歷史表(生效日期)中提取列的子集,但需要壓縮以便只顯示對相關值的更改。 我需要壓縮,因為歷史記錄表每天都會跟蹤列更改,並且對於表中的任何列更改都有一個新行。 請參閱下面的排序結果集。 每次 email 更改時,我都需要拉 MIN(eff_dt) MAX(exp_dt)。

ID EMAIL EFF_DT EXP_DT 
486007909 ? 7/22/2009 7/22/2009
486007909 ? 7/23/2009 7/23/2009
486007909 B@L.COM 7/24/2009 8/2/2009
486007909 B@L.COM 8/3/2009 8/10/2009
486007909 B@L.COM 8/11/2009 9/6/2013
486007909 ? 9/7/2013 10/22/2014
486007909 ? 10/23/2014 11/3/2014
486007909 B@L.COM 11/4/2014 12/1/2016

我認為這是一個差距和孤島問題。 在這種情況下,您可以使用行號的差異:

select id, email, min(eff_dt), max(exp_dt)
from (select t.*,
             row_number() over (partition by id order by eff_dt) as seqnum,
             row_number() over (partition by id, email order by eff_dt) as seqnum_e
      from t
     ) t
group by email, (seqnum - seqnum_e);

Teradata 具有用於標准化重疊周期的專有擴展:

SELECT id, email
  -- split the period back into seperate columns
  ,Begin(pd)
  -- reverts NEXT = last included date
  ,Last(pd)
FROM
 ( -- NORMALIZE works on periods only
   SELECT NORMALIZE id, email,
      -- periods include begin, but exclude end
      -- modify end_dt accordingly
      PERIOD(eff_dt, NEXT(exp_dt)) AS pd
   FROM tab
 ) AS dt

暫無
暫無

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

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