SQL时间点到时间范围

时间:2019-01-22 19:53:43

标签: mysql sql

我有以下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

1 个答案:

答案 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