【问题标题】:How to calculate start and enddate and start every new row with the next start date如何计算开始日期和结束日期并从下一个开始日期开始每一行
【发布时间】:2019-03-05 19:16:05
【问题描述】:

我正在使用这个 sql 来计算 startdates 和 enddates:

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

【问题讨论】:

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


    【解决方案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,我可以在一天内制作一张包含他所有戳记时间的表格
    • 好的,那么这个答案不起作用有什么原因吗?如果是这样,您应该编辑您的问题以使您的要求更具体。
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多