Вопрос: Группировка часов с 02:00:00 до 02:00:00 следующего дня
День добрый
есть следующий запрос который суммирует on_stream_hrs за день - trunc(daytime) и выдает за определенный период,
данные в таблице каждые полчаса, проблема в том что этот запрос суммирует часы за день с 00:00:00 до 23:59:59 а мне нужно с
02:00:00 до 02:00:00 следующего дня, как можно это реализовать?
Заранее благодарю за ответы.
object_code | on_stream_hrs | daytime | K11 | 0.5 | 23-Feb-17 | K11 | 0.5 | 23-Feb-17 00:30:00 | K11 | 0.5 | 23-Feb-17 01:00:00 | K11 | 0.5 | 23-Feb-17 02:00:00 | K11 | 0.5 | 23-Feb-17 02:30:00 | K11 | 0.5 | 23-Feb-17 03:00:00 | K13 | 0.5 | 23-Feb-17 | K13 | 0.5 | 23-Feb-17 00:30:00 | K13 | 0.5 | 23-Feb-17 01:00:00 | K13 | 0.5 | 23-Feb-17 02:00:00 | K11 | 0.5 | 23-Feb-17 02:30:00 | K11 | 0.5 | 23-Feb-17 03:00:00 |
|
select object_code,
sum(on_stream_hrs) on_stream_hrs,
daytime
from(select object_code,
on_stream_hrs,
trunc(daytime) daytime
from sub_day_status
where trunc(daytime) between to_date('1 Feb 2017') and to_date('28 Feb 2017')
)
where (object_code, daytime) in (select object_code,
trunc(daytime)
from sub_day_status
where trunc(daytime) between to_date('1 Feb 2017') and to_date('28 Feb 2017')
and on_stream_hrs >0.5)
group by object_code, daytime
order by daytime
Ответ:
sakot,
заготовка
1 with t as (
2 select 1 id, to_date('01.01.2017 00:00:00','dd.mm.yyyy hh24:mi:ss') d, 1 s from dual union all
3 select 1 id, to_date('01.01.2017 01:00:00','dd.mm.yyyy hh24:mi:ss') d, 2 s from dual union all
4 select 1 id, to_date('01.01.2017 02:00:00','dd.mm.yyyy hh24:mi:ss') d, 3 s from dual union all
5 select 1 id, to_date('01.01.2017 23:00:00','dd.mm.yyyy hh24:mi:ss') d, 4 s from dual union all
6 select 1 id, to_date('02.01.2017 01:49:49','dd.mm.yyyy hh24:mi:ss') d, 5 s from dual union all
7 select 1 id, to_date('02.01.2017 03:00:00','dd.mm.yyyy hh24:mi:ss') d, 6 s from dual union all
8 select 1 id, to_date('02.01.2017 17:00:00','dd.mm.yyyy hh24:mi:ss') d, 7 s from dual union all
9 select 2 id, to_date('01.01.2017 00:00:00','dd.mm.yyyy hh24:mi:ss') d, 10 s from dual union all
10 select 2 id, to_date('01.01.2017 14:00:00','dd.mm.yyyy hh24:mi:ss') d, 20 s from dual
11 )
12 select id,trunc(d-2/24)+2/24 d_start,sum(s) ss from t
13 group by id,trunc(d-2/24)
14* order by 1,2
SQL> /
ID D_START SS
---------- ------------------- ----------
1 31.12.2016 02:00:00 3
1 01.01.2017 02:00:00 12
1 02.01.2017 02:00:00 13
2 31.12.2016 02:00:00 10
2 01.01.2017 02:00:00 20
ююююю
stax