Sql время указывает на временной диапазон - PullRequest
0 голосов
/ 22 января 2019

У меня есть следующая таблица 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

У меня есть даты в моей БД, каждое из нихиметь не уникальный идентификатор.Я хочу рассчитать диапазон времени между ближайшими датами для каждого идентификатора.Таким образом, преобразование должно выполняться для каждого идентификатора отдельно и не должно влиять на другие идентификаторы.Мы можем даже забыть об идентификаторах и просто представить, что у меня есть только один столбец в моей БД, который является датами.Я хочу отсортировать даты и выполнить скользящее окно с шагом 1 и емкостью 2. Поэтому, если у меня есть 10 дат, я хочу получить в результате 9 временных диапазонов, которые должны быть в порядке возрастания.Предположим, у нас есть четыре даты: D1

1 Ответ

0 голосов
/ 22 января 2019

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...