mysql - 查询以从表中选择间隔

标签 mysql select intervals

我有一个定义时间间隔的表格。

 _______________________________
| id | description | start_date |
|____|_____________|____________|
|  1 | First       |    NULL    |
|  3 | Third       | 2009-12-18 |
|  5 | Second      | 2009-10-02 |
|  4 | Last        | 2009-12-31 |
|____|_____________|____________|

它只存储开始日期,结束日期是下一个日期的前一天。

我想要下一个结果:

 ____________________________________________
| id | description | start_date |  end_date  |
|____|_____________|____________|____________|
|  1 | First       |    NULL    | 2009-10-01 |
|  5 | Second      | 2009-10-02 | 2009-12-17 |
|  3 | Third       | 2009-12-18 | 2009-12-30 |
|  4 | Last        | 2009-12-31 |    NULL    |
|____|_____________|____________|____________|

我应该如何编写此查询,因为一行包含来自其他行的值?

(我认为 MySQL 函数 DATE_SUB 可能很有用。)

最佳答案

SELECT d.id, d.description, MIN(d.start_date), MIN(d2.start_date) - INTERVAL 1
DAY AS end_date
FROM start_dates d
LEFT OUTER JOIN start_dates d2 ON ( d2.start_date > d.start_date OR d.start_date IS NULL )
GROUP BY d.id, d.description
ORDER BY d.start_date ASC

关于mysql - 查询以从表中选择间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1929917/

相关文章:

javascript - 如何重构函数以在间隔停止时返回 promise ?

javascript - onclick 获取数据并插入到文本区域

MySQL - 如何选择一列以使结果成为树结构?

Mysql如何根据优先级进行选择

R - 创建具有非空交集的类似切割的间隔

r - 根据时间间隔对 R 中的行进行子集化

mysql - 我需要 GROUP BY、LIMIT、ORDER BY、SUM 等。在动态创建的一组数据上,每次都会有不同的列

mysql - 创建主键时SQL语句语法错误

mysql - MySQL 如何在一个字段中选择多个值?

php - 带有位置占位符的 MySQL SELECT IN 仅根据字符串中的第一个值进行选择/过滤