gpt4 book ai didi

mysql - 使用下一行的日期作为当前行的结束日期

转载 作者:行者123 更新时间:2023-12-01 00:34:35 26 4
gpt4 key购买 nike

我有一个如下所示的表格:

ID | FOCUS      | DATE
----------------------------
1 | equipment | 2018-01-01
2 | uniform | 2018-02-14
3 | attendance | 2018-04-03

在引入新焦点时添加行。

我希望能够获取特定焦点的开始日期和结束日期,假设它在下一个焦点开始时结束。生成如下 View :

ID | FOCUS      | STARTDATE  | ENDDATE
--------------------------------------
1 | equipment | 2018-01-01 | 2018-02-14
2 | uniform | 2018-02-14 | 2018-04-03
3 | attendance | 2018-04-03 | NULL

我正在使用的数据库没有 LEAD 或 LAG 函数,因此我需要一种在纯 SQL 中执行此操作的方法。到目前为止我发现的所有解决方案都使用 LEAD 和 LAG。有什么想法吗?

最佳答案

您可以通过 LEFT JOIN 将表与其自身进行连接来获得所需的结果,右表的日期是大于左表日期的最小日期值。无论 ID 值是否连续,此查询都将有效:

SELECT t1.ID, t1.FOCUS, t1.DATE AS STARTDATE, t2.DATE AS ENDDATE
FROM table1 t1
LEFT JOIN table1 t2 ON t2.DATE = (SELECT MIN(DATE)
FROM table1 t3
WHERE t3.DATE > t1.DATE)

输出:

ID  FOCUS       STARTDATE   ENDDATE
1 equipment 2018-01-01 2018-02-14
2 uniform 2018-02-14 2018-04-03
3 attendance 2018-04-03 null

Demo on dbfiddle

如果两个事件有可能在同一天结束,您可以像下面这样修改查询,只要 ID 值随着 DATE 增加,它就可以工作值增加。

SELECT DISTINCT t1.ID, t1.FOCUS, t1.DATE AS STARTDATE, t2.DATE AS ENDDATE
FROM table1 t1
LEFT JOIN table1 t2 ON t2.DATE = (SELECT MIN(DATE)
FROM table1 t3
WHERE t3.DATE >= t1.DATE AND t3.ID > t1.ID)

Demo on dbfiddle

关于mysql - 使用下一行的日期作为当前行的结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58058500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com