Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何计算开始和结束日期,并用下一个开始日期开始每一行_Sql_Sql Server_Tsql_Sql Server 2008 - Fatal编程技术网

Sql 如何计算开始和结束日期,并用下一个开始日期开始每一行

Sql 如何计算开始和结束日期,并用下一个开始日期开始每一行,sql,sql-server,tsql,sql-server-2008,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

我使用此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年1月4日至2016年1月11日

下一行应以开头

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


下一行应该将
结束日期
作为
开始日期

既然我看不出这在逻辑上不正确的原因,您可以简单地消除每一个偶数行:

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

既然我看不出这在逻辑上不正确的原因,您可以简单地消除每一个偶数行:

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,我可以在一天内创建一个包含他所有戳时间的表OK,那么这个答案不起作用有什么原因吗?如果是这样,您应该编辑您的问题,使您的要求更具体。谢谢您的回复。这只是一个例子。实际数据是这样的:每次员工休息时,他都必须在休息时间上盖章。有了这个sql,我可以在一天内创建一个包含他所有戳时间的表OK,那么这个答案不起作用有什么原因吗?如果是这样,你应该编辑你的问题,使你的要求更具体。