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