Sql 如何计算开始和结束日期,并用下一个开始日期开始每一行
我使用此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
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,那么这个答案不起作用有什么原因吗?如果是这样,你应该编辑你的问题,使你的要求更具体。