[英]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.