Проблема в том, что вы применяете date_trunc(week..)
перед настройкой времени по часам.Одним из решений было бы следующее:
- сначала, сдвинуть время смены на 3 часа вперед, чтобы смена в 9 вечера началась в полночь воскресенья
- , а затем усечь до недели, причем первым днем было воскресенье.недели
- , затем переместите результат назад на 3 часа, в субботу на 21
Вот пример:
alter session set week_start = 7, timestamp_output_format='YYYY-MM-DD HH24:MI:SS DY';
create or replace table x(t timestamp);
insert into x values('2018-09-14 08:00:00'),('2018-09-15 20:59:59'),('2018-09-15 21:00:00'),('2018-09-16 23:00:00'), ('2018-09-22 20:59:59'),('2018-09-22 21:00:00');
select t, dateadd(hour, 3, t), date_trunc(week, dateadd(hour, 3, t)), dateadd(hour, -3, date_trunc(week, dateadd(hour, 3, t))) from x;
-------------------------+-------------------------+---------------------------------------+----------------------------------------------------------+
T | DATEADD(HOUR, 3, T) | DATE_TRUNC(WEEK, DATEADD(HOUR, 3, T)) | DATEADD(HOUR, -3, DATE_TRUNC(WEEK, DATEADD(HOUR, 3, T))) |
-------------------------+-------------------------+---------------------------------------+----------------------------------------------------------+
2018-09-14 08:00:00 Fri | 2018-09-14 11:00:00 Fri | 2018-09-09 00:00:00 Sun | 2018-09-08 21:00:00 Sat |
2018-09-15 20:59:59 Sat | 2018-09-15 23:59:59 Sat | 2018-09-09 00:00:00 Sun | 2018-09-08 21:00:00 Sat |
2018-09-15 21:00:00 Sat | 2018-09-16 00:00:00 Sun | 2018-09-16 00:00:00 Sun | 2018-09-15 21:00:00 Sat |
2018-09-16 23:00:00 Sun | 2018-09-17 02:00:00 Mon | 2018-09-16 00:00:00 Sun | 2018-09-15 21:00:00 Sat |
2018-09-22 20:59:59 Sat | 2018-09-22 23:59:59 Sat | 2018-09-16 00:00:00 Sun | 2018-09-15 21:00:00 Sat |
2018-09-22 21:00:00 Sat | 2018-09-23 00:00:00 Sun | 2018-09-23 00:00:00 Sun | 2018-09-22 21:00:00 Sat |
-------------------------+-------------------------+---------------------------------------+----------------------------------------------------------+
Последний столбец, который вы можете использовать длягруппировка, и все должно работать.