【问题标题】:SQL: Calculate the number of days from overlapping date rangeSQL:计算重叠日期范围的天数
【发布时间】:2014-02-25 18:50:23
【问题描述】:

我想计算每个 ID 的天数,但天数重叠。

ID  STARTDATE   ENDDATE
1   19/12/2012  29/01/2013
1   30/05/2013  14/07/2013
1   15/02/2013  12/03/2013
1   13/03/2013  18/03/2013
1   19/03/2013  26/03/2013
1   27/01/2013  07/04/2013
1   08/04/2013  09/04/2013
2   08/04/2013  14/07/2013
2   30/05/2013  12/07/2013
3   08/04/2013  10/04/2013
3   23/05/2013  30/06/2013

【问题讨论】:

  • 请提供一个清晰的示例,说明您期望看到的结果。另外,到目前为止,您尝试过什么?
  • 欢迎来到 SO。你试过什么?本网站用于解决问题,而不是从头开始提供现成的复制粘贴解决方案。
  • 你能解释一下你的问题吗?为什么不能只使用DateDiff()
  • 根据您的解释,您似乎不想重新计算重叠天数。那么您是否要将两个或多个重叠的日期范围合并为一个,然后取一个日期差?

标签: sql overlapping days


【解决方案1】:
SELECT SUM(DATEDIFF( d,STARTDATE,ENDDATE)) AS [Days],ID
FROM TABLE
GROUP BY ID

或从最小/最大日期范围中获取天数:

SELECT D.ID, SUM(DATEDIFF( d,D.STARTDATE,D.ENDDATE)) AS [Days]
FROM (
SELECT ID, MIN(STARTDATE) AS [STARTDATE], MAX(ENDDATE) AS [ENDATE]
FROM TABLE
GROUP BY ID , MIN(STARTDATE), MAX(ENDDATE) 
) AS D
ORDER BY D.ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 2013-12-15
    • 2016-09-08
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多