我有一個資料,其中包含 3 個不同數量的“設備”,每個“設備”都有不同的合同日期(開始日期和結束日期)。
螢屏資料:

我想寫一個腳本,我可以說對于每個“設備”如果“end_date”的第一行在幾天內與“start_date”的第二行匹配,那么我應該在第二個中執行 (“start_date” - 1 day) line 作為第一行的 new_end_date。
我已經嘗試過,但僅針對前兩行(未概括):
SELECT[Ref]
,[Equipement]
,[start_date]
,[end_date]
,CASE WHEN DATEDIFF(day, (SELECT [end_date] FROM [DWDiagnostics].[dbo].[Test1] WHERE [Ref] = 1290), (SELECT [start_date] FROM [DWDiagnostics].[dbo].[Test1] WHERE [Ref] = 1380)) < 0 THEN DATEADD(dd, -1, [start_date]) ELSE [end_date]
END AS [new_end_date]
FROM [DWDiagnostics].[dbo].[Test1]
這是我想要的結果的螢屏

資料的 SQL 代碼 ==>
DECLARE @Test TABLE
(
Ref VARCHAR(10),
Equipment VARCHAR(10),
start_date DATE,
end_date DATE
)
INSERT INTO @Test VALUES ('1290','9999','2014-03-01','2016-04-16')
INSERT INTO @Test VALUES ('1380','9999','2016-04-01','2018-05-17')
INSERT INTO @Test VALUES ('2000','9999','2018-05-01','2020-06-27')
INSERT INTO @Test VALUES ('2900','9999','2020-06-01','2021-06-29')
INSERT INTO @Test VALUES ('1556','8888','2016-01-01','2017-02-27')
INSERT INTO @Test VALUES ('1876','8888','2017-02-01','2018-04-26')
INSERT INTO @Test VALUES ('2897','8888','2018-04-01','2020-03-30')
INSERT INTO @Test VALUES ('2653','7777','2017-09-01','2018-10-14')
INSERT INTO @Test VALUES ('4536','7777','2018-10-01','2019-11-13')
INSERT INTO @Test VALUES ('2987','7777','2019-11-01','2020-12-27')
INSERT INTO @Test VALUES ('2776','7777','2020-12-01','2021-11-30')
SELECT * FROM @Test;
uj5u.com熱心網友回復:
感謝您發布示例資料和表格結構。使解決問題變得更加容易。這應該根據您對問題的解釋起作用。但是,您根據需要發布的一些 new_end_date 值與您的描述不匹配。例如,對于設備 9999,您的第二個 start_date 為 4/1/2016,但在您想要的輸出中顯示 3/30。4/1 的前一天是 3/31。還有一些其他示例的日期與您想要的輸出中的日期類似,但與前一天略有不同。
DECLARE @Test TABLE
(
Ref VARCHAR(10),
Equipment VARCHAR(10),
start_date DATE,
end_date DATE
)
INSERT INTO @Test VALUES ('1290','9999','2014-03-01','2016-04-16')
INSERT INTO @Test VALUES ('1380','9999','2016-04-01','2018-05-17')
INSERT INTO @Test VALUES ('2000','9999','2018-05-01','2020-06-27')
INSERT INTO @Test VALUES ('2900','9999','2020-06-01','2021-06-29')
INSERT INTO @Test VALUES ('1556','8888','2016-01-01','2017-02-27')
INSERT INTO @Test VALUES ('1876','8888','2017-02-01','2018-04-26')
INSERT INTO @Test VALUES ('2897','8888','2018-04-01','2020-03-30')
INSERT INTO @Test VALUES ('2653','7777','2017-09-01','2018-10-14')
INSERT INTO @Test VALUES ('4536','7777','2018-10-01','2019-11-13')
INSERT INTO @Test VALUES ('2987','7777','2019-11-01','2020-12-27')
INSERT INTO @Test VALUES ('2776','7777','2020-12-01','2021-11-30')
select *
, new_end_date = isnull(dateadd(day, -1, lead(start_date, 1)over(partition by Equipment order by start_date)), end_date)
from @Test
ORDER BY Equipment desc
, start_date
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486966.html
上一篇:在PostgreSQL中使用日期范圍來定義一段時間(年)內的活動站點
下一篇:獲取過去7天、20天和YTD計數
