[英]Get previous value/next value in DB2 SQL
我試圖從下面的示例表中獲取某些數據的值:
DEAL_ID | DISC | EFF_DATE | EXP_DATE
100 | 2 | 01-01-19 | 31-01-2019
101 | 2 | 01-02-19 | 15-02-2019
103 | 3 | 01-03-19 | 31-03-2019
104 | 4 | 01-04-19 | 25-04-2019
如圖所示,deal_id 101和103之間有一個時間段,從16-2-2019到28-2-2019,沒有分配的DISC值。 在這種情況下,對於任何未分配DEAL / DISC的時間段,它將采用該時間段之前存在的最后一個EXP_DATE,並將EXP_DATE更改為下一個EFF_DATE,覆蓋所有未分配的時間段,像這樣結束表格:
DEAL_ID | DISC | EFF_DATE | EXP_DATE
100 | 2 | 01-01-19 | 31-01-2019
101 | 2 | 01-02-19 | 28-02-2019
103 | 3 | 01-03-19 | 31-03-2019
104 | 4 | 01-04-19 | 25-04-2019
我確實找到了DB2的LEAD / LAG函數,但是在我使用的版本中它無效/不起作用/無法識別(不知道哪個版本是btw)。
我當前的代碼是:
SELECT A.deal_id as deal_id, A.vendr_nbr, A.vndr_deal_eff_date, A.vndr_deal_exp_date, (YEAR(vndr_deal_eff_date) * 10000 + MONTH(vndr_deal_eff_date)*100 + DAY(vndr_deal_eff_date)) limitDate1EFF, (YEAR(vndr_deal_exp_date) * 10000 + MONTH(vndr_deal_exp_date)*100 + DAY(vndr_deal_exp_date)) limitDate2EXP, B.DISC_CHRG_ID, B.DISCOUNT_VALUE, C.VENDR_DEPT_NBR
FROM workdbo.vendor_deal A
LEFT JOIN workdbo.DDA_DISC_CHRG_TIER B ON A.deal_id = B.DISC_CHRG_ID
LEFT JOIN workdbo.DEAL_DEPT C ON A.deal_id = C.deal_id
任何幫助,將不勝感激。
注意:EFF_DATE和EXP_DATE都是date
數據類型,因此被識別。 根據我發布的查詢, A.vndr_deal_eff_date, A.vndr_deal_exp_date
是我使用的日期。
(如果帖子需要更改以適合stackoverflow准則,請告訴我應該編輯/添加/等內容,而不是只留下-1,謝謝)
根據您的“示例”表,您應該只使用lead()
:
select . . . ,
add_days(lead(eff_date) over (order by eff_date), -1)
from example;
我不確定您的查詢(涉及3個表並且似乎未使用date
數據類型)與該問題有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.