Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
sakot
Member

Откуда:
Сообщений: 132
День добрый
есть следующий запрос который суммирует 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
13 мар 17, 11:51    [20288777]     Ответить | Цитировать Сообщить модератору
 Re: Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
Добрый Э - Эх
Guest
sakot,

group by ..., trunc(daytime - 1/12)
13 мар 17, 11:57    [20288830]     Ответить | Цитировать Сообщить модератору
 Re: Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
Elic
Member

Откуда:
Сообщений: 29990
sakot
есть следующий запрос
Тот ещё говнокодец.
sakot
суммирует часы за день с 00:00:00 до 23:59:59 а мне нужно с
02:00:00 до 02:00:00 следующего дня, как можно это реализовать?
trunc(… - interval '2' hour)
13 мар 17, 11:59    [20288838]     Ответить | Цитировать Сообщить модератору
 Re: Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
sakot
Member

Откуда:
Сообщений: 132
Elic,
согласен гонокодец:

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, trunc(daytime - interval '2' hour) 
order by daytime


дает следующую ошибку:

[Error] Execution (9: 54): ORA-00979: not a GROUP BY expression
13 мар 17, 12:13    [20288928]     Ответить | Цитировать Сообщить модератору
 Re: Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7135
sakot,

Правильно матерится
Где у тебя в выборке GROUP BY выражение? по чему он будет группировать?
13 мар 17, 12:19    [20288970]     Ответить | Цитировать Сообщить модератору
 Re: Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
sakot
Member

Откуда:
Сообщений: 132
Elic,
он trunc(daytime + interval '2' hour) добавляет 2 часа к daytime но проблему группировки с
02:00:00 до 02:00:00 следующего дня не решает
13 мар 17, 13:02    [20289212]     Ответить | Цитировать Сообщить модератору
 Re: Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7135
sakot
Elic,
он trunc(daytime + interval '2' hour) добавляет 2 часа к daytime но проблему группировки с
02:00:00 до 02:00:00 следующего дня не решает


тебе подсказали как решать, а не решили задачу за тебя
13 мар 17, 13:19    [20289299]     Ответить | Цитировать Сообщить модератору
 Re: Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
Elic
Member

Откуда:
Сообщений: 29990
sakot
добавляет 2 часа
Мозг-то включи.
13 мар 17, 13:25    [20289327]     Ответить | Цитировать Сообщить модератору
 Re: Группировка часов с 02:00:00 до 02:00:00 следующего дня  [new]
stax..
Guest
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
13 мар 17, 17:56    [20290783]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить