【问题标题】:How to create a single date column from multiple date column with start date and end date?如何从具有开始日期和结束日期的多个日期列创建单个日期列?
【发布时间】:2022-01-25 22:33:40
【问题描述】:

我有一张包含此类数据的表格,没有重叠的日期:

id start_date end_date
1 2021-12-20 2021-12-20
2 2021-12-15 2021-12-18
3 2021-12-10 2021-12-11


我希望输出为:

id date
1 2021-12-20
2 2021-12-18
2 2021-12-17
2 2021-12-16
2 2021-12-15
3 2021-12-11
3 2021-12-10

我尝试使用min(start_date) and max(end_date) 范围内的生成日期创建表,并使用WHERE date>=start_date and date<=end_date 连接。

【问题讨论】:

  • 什么是 MySQL 版本?
  • MySQL版本为8.0.26
  • 使用递归 CTE。

标签: mysql sql datediff mysql-8.0


【解决方案1】:

您可以使用递归 CTE 来生成行以及加入您的表 (t),例如

WITH RECURSIVE cte
AS
(
SELECT 1 i
UNION ALL
SELECT i + 1 i
  FROM cte
 WHERE i + 1 <= ( SELECT DATEDIFF(MAX(end_date),MIN(start_date))+1 FROM t )  
), dmin AS
(
 SELECT MIN(start_date) AS min_date FROM t
)
SELECT id, DATE_ADD(t2.min_date, INTERVAL i-1 DAY) AS date
  FROM cte
  LEFT JOIN (SELECT * FROM t JOIN dmin ) AS t2
    ON DATE_ADD(t2.min_date, INTERVAL i-1 DAY) >= start_date 
   AND DATE_ADD(t2.min_date, INTERVAL i-1 DAY) <= end_date
 WHERE start_date IS NOT NULL 
 ORDER BY id, date DESC

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2021-08-22
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2021-04-23
    相关资源
    最近更新 更多