如何计算开始日期和结束日期并从下一个开始日期开始每一行
How to calculate start and enddate and start every new row with the next start date
我正在使用这个 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
输出如下所示:
但我也希望它看起来像这样:
不应该存在的不同行(红色):
举个例子:当第一行有
04.01.2016 - 11.01.2016
下一行应以
开头
18.01.2016 - 25.01.2016
下一行应该有 enddate
作为 startdate
。
既然我看不出这在逻辑上不正确的任何原因,您可以简单地删除每个偶数行:
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
我正在使用这个 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
输出如下所示:
但我也希望它看起来像这样:
不应该存在的不同行(红色):
举个例子:当第一行有
04.01.2016 - 11.01.2016
下一行应以
开头18.01.2016 - 25.01.2016
下一行应该有 enddate
作为 startdate
。
既然我看不出这在逻辑上不正确的任何原因,您可以简单地删除每个偶数行:
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