我有一个包含以下数据的表:
+-----------+-----------+
| Date_from | Date_to |
+-----------+-----------+
| 20-NOV-19 | 22-NOV-19 |
+-----------+-----------+
| 10-NOV-19 | 21-NOV-19 |
+-----------+-----------+
| 14-NOV-19 | 26-NOV-19 |
+-----------+-----------+
我需要查询以找到date_from
和date_to
之间的差之和。
示例:
查询结果应为
15天(2 + 9 + 4)
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用下面的查询来获取总计。 请使用您的实际表名更改Table_name
SELECT SUM(TIMESTAMPDIFF(DAY,Date_from,Date_to)) as total FROM Table_name
答案 1 :(得分:0)
我在子查询中使用了窗口函数来计算date_from和date_to之间的差,然后减去任何重叠的天数
SELECT SUM(days) FROM
(SELECT CASE WHEN LEAD(date_from) OVER w < date_to THEN DATEDIFF(date_to, date_from) + DATEDIFF(LEAD(date_from) OVER w, date_to)
ELSE DATEDIFF(date_to, date_from)
END AS days
FROM test
WINDOW w AS (ORDER BY date_to)) as d
请注意,尽管这样会产生16天的结果,而不是问题中的15天,但是
SELECT DATEDIFF('2019-11-26', '2019-11-10')
答案 2 :(得分:0)
您可以使用CTE
生成范围内的所有日期并获取distinct count()
。这将使您获得的总天数为17
。由于您需要差异,因此必须减去2(开始日期和结束日期)
WITH recursive Date_Ranges AS (
select datefrom as Dt,dateto from mydates
union all
select dt + interval 1 day , dateto
from Date_Ranges
where dt < dateto)
select count(distinct(dt))-2 from Date_Ranges