Набор дат разбить на пачки
От: Neco  
Дата: 27.02.15 07:42
Оценка:
Есть такой набор данных:
2014-11-01 21:26:00
2014-11-01 22:20:00
2014-11-02 04:30:00
2014-11-02 06:15:00
2014-11-02 07:42:00
2014-12-01 20:30:00
2014-12-01 22:20:00
2014-12-02 04:25:00
2014-12-02 06:15:00
2014-12-02 07:40:00
2015-01-01 21:24:00
2015-01-01 21:31:00
2015-01-01 22:20:00
2015-01-02 04:30:00
2015-01-02 06:15:00
2015-01-02 07:43:00


необходимо эти данных разбить на участки, в которых нет зазора более чем 18 часов.
т.е. подряд идущие события являются частью одной пачки и у этой пачки надо узнать диапазон — когда пачка началась и когда закончилась.

на выходе надо получить такое:
2014-11-01 21:26:00    2014-11-01 21:26:00    2014-11-02 07:42:00
2014-11-01 22:20:00    2014-11-01 21:26:00    2014-11-02 07:42:00
2014-11-02 04:30:00    2014-11-01 21:26:00    2014-11-02 07:42:00
2014-11-02 06:15:00    2014-11-01 21:26:00    2014-11-02 07:42:00
2014-11-02 07:42:00    2014-11-01 21:26:00    2014-11-02 07:42:00
2014-12-01 20:30:00    2014-12-01 20:30:00    2014-12-02 07:40:00
2014-12-01 22:20:00    2014-12-01 20:30:00    2014-12-02 07:40:00
2014-12-02 04:25:00    2014-12-01 20:30:00    2014-12-02 07:40:00
2014-12-02 06:15:00    2014-12-01 20:30:00    2014-12-02 07:40:00
2014-12-02 07:40:00    2014-12-01 20:30:00    2014-12-02 07:40:00
2015-01-01 21:24:00    2015-01-01 21:24:00    2015-01-02 07:43:00
2015-01-01 21:31:00    2015-01-01 21:24:00    2015-01-02 07:43:00
2015-01-01 22:20:00    2015-01-01 21:24:00    2015-01-02 07:43:00
2015-01-02 04:30:00    2015-01-01 21:24:00    2015-01-02 07:43:00
2015-01-02 06:15:00    2015-01-01 21:24:00    2015-01-02 07:43:00
2015-01-02 07:43:00    2015-01-01 21:24:00    2015-01-02 07:43:00


попытался так
    select
        d."operationDate"
        first_value(d."operationDate") over (partition by d."trainIndex" order by d."operationDate" range between 18/24 preceding and 18/24 following) f_date,
        last_value(d."operationDate") over (partition by d."trainIndex" order by d."operationDate" range between 18/24 preceding and 18/24 following) l_date
    from "TrainData" d


но он на тестовых данных возвращает неправильный результат, поскольку 18 часов считаются от даты в первой колонке.
2015-02-26 16:16:00    2015-02-26 16:16:00    2015-02-27 08:35:00
2015-02-26 16:17:00    2015-02-26 16:16:00    2015-02-27 08:35:00
2015-02-26 16:35:00    2015-02-26 16:16:00    2015-02-27 08:35:00
2015-02-26 16:52:00    2015-02-26 16:16:00    2015-02-27 08:35:00
2015-02-26 17:31:00    2015-02-26 16:16:00    2015-02-27 08:35:00
2015-02-26 17:36:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 18:06:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 18:45:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 20:32:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 00:44:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 02:40:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 05:10:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 08:35:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 11:35:00    2015-02-26 17:36:00    2015-02-27 11:35:00


а мне нужно чтобы даты последовательно сравнивались и всё считалось одной пачкой, т.е. выглядело так:
2015-02-26 16:16:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 16:17:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 16:35:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 16:52:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 17:31:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 17:36:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 18:06:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 18:45:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-26 20:32:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 00:44:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 02:40:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 05:10:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 08:35:00    2015-02-26 16:16:00    2015-02-27 11:35:00
2015-02-27 11:35:00    2015-02-26 16:16:00    2015-02-27 11:35:00


субд оракл.
всю ночь не ем, весь день не сплю — устаю
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.