Mysql 如何从上一行获取日期

Mysql 如何从上一行获取日期,mysql,sql,Mysql,Sql,我想创建一个名为“End Date”的新列,并将下一行的值放在那里,但如果开始日期是最新的,则将当前日期放在那里 我的MySQL db版本不支持滞后和超前功能 当前状态: Start Date User_id 11/12/2019 9:26:00 user3 29/12/2019 8:43:00 user2 08/01/2020 10:52:00 user2 10/02/2020 10:20:00 user1 我想要达

我想创建一个名为“End Date”的新列,并将下一行的值放在那里,但如果开始日期是最新的,则将当前日期放在那里

我的MySQL db版本不支持滞后和超前功能

当前状态:

Start Date            User_id  
11/12/2019 9:26:00    user3    
29/12/2019 8:43:00    user2   
08/01/2020 10:52:00   user2    
10/02/2020 10:20:00   user1    
我想要达到的目标:

Start Date            User_id  End Date
11/12/2019 9:26:00    user3    29/12/2019 8:43:00
29/12/2019 8:43:00    user2    08/01/2020 10:52:00
08/01/2020 10:52:00   user2    10/02/2020 10:20:00 
10/02/2020 10:20:00   user1    28/05/2020 10:10:00 

一种方法是选择比当前行的
开始日期
大的最小
开始日期
作为
结束日期
,如果该日期不存在,则改用
立即()

SELECT *, 
       COALESCE((SELECT MIN(`Start Date`)
                 FROM data d2
                 WHERE d2.`Start Date` > d.`Start Date`),
                NOW()) AS `End Date`
FROM data d
ORDER BY `Start Date`
输出:

Start Date              User_id     End Date
2019-12-11 09:26:00     user3       2019-12-29 08:43:00
2019-12-29 08:43:00     user2       2020-01-08 10:52:00
2020-01-08 10:52:00     user2       2020-02-10 10:20:00
2020-02-10 10:20:00     user1       2020-05-28 07:51:24


注意,我假设表中的日期实际上是
datetime
值。如果它们不是(为什么不是?),您需要首先使用转换它们。

记住关系数据库中的行表示无序集,请定义“下一步”,我想这可以解释您的问题,@JaredKarl如果您是指“lead”函数,我使用的数据库版本不支持。建议您升级到MySQL的后期版本,如果不是,使用MySQL的用户变量,如这里所建议的:查询应该是什么样的,如果我们想在给定的类别内考虑,我尝试使用分组函数,但它没有帮助。下面是一个广泛的例子:@Merix。这将是一个不同的问题,应该作为一个新问题提出。你应该在问之前接受这个答案。@Merix也许吧?如果这不是你想要的,请按照戈登的建议问一个新问题。