我有以下sql表:
id time
1 2018-12-30
1 2018-12-31
1 2018-01-03
2 2018-12-15
2 2018-12-30
我要进行查询,将导致以下数据:
id start_time end_time
1 2018-12-30 2018-12-31
1 2018-12-31 2018-01-03
2 2018-12-15 2018-12-30
这是否有可能在合理的时间内用sql做,还是最好用其他方法来做呢?
方法失败(需要太多时间):
SELECT id, time as start_time, (
SELECT MIN(time)
FROM table as T2
WHERE T2.id = T1.id
AND T2.time < T1.time
) as end_time
FROM table as T1
我的数据库中有日期,每个日期都有非唯一ID。我想为每个ID计算最接近的日期之间的时间范围。因此,应分别对每个ID进行转换,并且不应影响其他ID。我们甚至可以忘记id,而只需想象我数据库中只有一列是日期。我想对日期进行排序,并使用步骤1和容量2执行滑动窗口。因此,如果我有10个日期,我希望结果中有9个时间范围,这些时间范围应按递增顺序排列。假设我们有四个日期:D1
答案 0 :(得分:3)
在MySQL 8.x中,您可以使用LEAD()
函数来窥视下一行:
with x as (
select
id,
time as start_time,
lead(time) over(partition by id order by time) as end_time
from my_table
)
select * from x where end_time is not null