如何计算开始日期和结束日期以及如何从下一个开始日期开始每个新行

时间:2019-03-05 19:16:06

标签: sql sql-server tsql sql-server-2008

我正在使用此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

输出看起来像这样:

enter image description here

但是我也希望它看起来像这样:

enter image description here

区别不应该存在的行(红色):

enter image description here

例如:当第一行包含

  

2016年4月1日至2016年1月11日

下一行应以

开头
  

2016年1月18日至2016年1月25日

下一行应将enddate作为startdate

1 个答案:

答案 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