我正在使用此sql计算开始日期和结束日期:
WITH RankedProcess (ProcessOrder, ProcessDate, Seq) AS
(
SELECT ProcessOrder, ProcessDate, ROW_NUMBER() OVER(ORDER BY ProcessDate) AS Seq
From #Temp
)
SELECT P1.ProcessOrder, P1.ProcessDate AS ProcessBegin, P2.ProcessDate AS ProcessEnd , P1.Seq , P2.Seq
FROM RankedProcess AS P1
LEFT OUTER JOIN RankedProcess AS P2
ON P1.Seq = P2.Seq -1
输出看起来像这样:
但是我也希望它看起来像这样:
区别不应该存在的行(红色):
例如:当第一行包含
2016年4月1日至2016年1月11日
下一行应以
开头2016年1月18日至2016年1月25日
下一行应将enddate
作为startdate
。
答案 0 :(得分:0)
好吧,由于我看不到任何逻辑上不正确的原因,因此您可以简单地消除每个偶数行:
WITH RankedProcess (ProcessOrder, ProcessDate, Seq) AS
(
SELECT ProcessOrder, ProcessDate, ROW_NUMBER() OVER(ORDER BY ProcessDate) AS Seq
From #Temp
)
SELECT P1.ProcessOrder, P1.ProcessDate AS ProcessBegin, P2.ProcessDate AS ProcessEnd , P1.Seq , P2.Seq
FROM RankedProcess AS P1
LEFT OUTER JOIN RankedProcess AS P2
ON P1.Seq = P2.Seq -1
WHERE P1.Seq % 2 = 1