3
我在寫一個查詢以從數據轉儲中獲取SCD 2類型的數據。 我的數據和代碼如下:Teradata查詢中的導致和滯後 - 對於類別
create table promotions
(
start_date date,
end_date date,
promotion_name varchar(50));
Insert語句來填充表:
insert into promotions values ('9/1/2017','9/2/2017','P1');
insert into promotions values ('9/2/2017','9/3/2017','P1');
insert into promotions values ('9/3/2017','9/4/2017','P1');
insert into promotions values ('9/4/2017','9/5/2017','P1');
insert into promotions values ('9/5/2017','9/6/2017','P2');
insert into promotions values ('9/6/2017','9/7/2017','P2');
insert into promotions values ('9/7/2017','9/8/2017','P2');
insert into promotions values ('9/8/2017','9/9/2017','P2');
insert into promotions values ('9/9/2017','9/10/2017','P2');
insert into promotions values ('9/10/2017','9/11/2017','P2');
insert into promotions values ('9/11/2017','9/12/2017','P3');
insert into promotions values ('9/12/2017','9/13/2017','P3');
insert into promotions values ('9/13/2017','9/14/2017','P3');
insert into promotions values ('9/14/2017','9/15/2017','P3');
預期結果:
Date_Start Date_End Promotion Name
9/1/2017 9/4/2017 P1
9/5/2017 9/10/2017 P2
9/11/2017 9/13/2017 P3
查詢我寫:
with cte as (select rank() over (partition by promotion_name order by start_date asc) as "Rank"
,start_date
,dateadd(day,-1,start_date) as EndDate
,promotion_name
--first_name, last_name
from dbo.promotions)
select * from cte where rank=1;
查詢
start_date EndDate promotion_name
2017-09-01 2017-08-31 P1
2017-09-05 2017-09-04 P2
2017-09-11 2017-09-10 P3
問題與上述查詢的輸出是,相比於輸出表以上時結束日期是越來越顯示在錯誤的方式, 。
在SQL服務器上,引導和滯後功能解決了這個問題,但是在TERADATA上我無法獲得引導/滯後功能的等價物。
我應該如何去做。我不想創建任何易失性/臨時表,它只是一個簡單的ETL查詢。