Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
rtyts
Member

Откуда:
Сообщений: 301
Здравствуйте!
Версия:
автор
Oracle Database 11g Release 11.2.0.2.0 - 64bit Production


Запрос:

SELECT 
to_number(to_char(INSERTTS, 'ddmmyyyyhh24'))
FROM M_P
WHERE INSERTTS >= TO_TIMESTAMP('03-11-2017 18.00.00','dd-mm-yyyy hh24:mi:ss')
AND INSERTTS <= TO_TIMESTAMP('04-11-2017 02.00.00','dd-mm-yyyy hh24:mi:ss')
AND s_id=34
--GROUP BY (to_number(to_char(INSERTTS, 'ddmmyyyyhh24')) )
ORDER BY INSERTTS ASC;


Предоставляет выборку типа:
автор
1 311201718
2 311201718
3 311201719
4 311201719
5 311201719
6 311201719
7 311201719
....
35 311201722
36 311201722
37 311201722
...

Тут 311201718 - это дата 03.11.2017 18:0х:хх, усечённая до часов. Мне надо сгруппировать, а в конечном итоге подсчитать количество строк для каждого часа в указанном диапазоне времени.

Т.е. ожидаемый результат:
автор
1 2
2 5
3 3
...


Но если использовать:
GROUP BY (to_number(to_char(INSERTTS, 'ddmmyyyyhh24')) )

То появляется ошибка:
автор
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
Error at Line: 8 Column: 9

Не хочет группировать "на лету" видимо.
Как решить данную проблему?
Спасибо!
5 дек 17, 12:37    [21006868]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2787
rtyts,

1) trunc(INSERTTS,'hh24')
2) to_char(INSERTTS, 'yyyymmddhh24')

.....
stax
5 дек 17, 12:44    [21006891]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
Dshedoo
Member

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

Ругается на группировку, потому что у тебя ордер идёт по выражению, которое не входит в группировку, т.е. по сути ошибка в строке:
ORDER BY INSERTTS ASC;
5 дек 17, 12:50    [21006915]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
Dshedoo
Member

Откуда:
Сообщений: 393
Dshedoo
rtyts,

Ругается на группировку, потому что у тебя ордер идёт по выражению, которое не входит в группировку, т.е. по сути ошибка в строке:
ORDER BY INSERTTS ASC;

Подмени на

ORDER BY  to_number(to_char(INSERTTS, 'ddmmyyyyhh24')) ASC;
5 дек 17, 12:51    [21006919]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2787
rtyts,
SQL> ed
Wrote file afiedt.buf

  1  with m_p (insertts) as (
  2  select TO_date('03-11-2017 18.05.00','dd-mm-yyyy hh24:mi:ss') from dual union all
  3  select TO_date('03-11-2017 18.15.00','dd-mm-yyyy hh24:mi:ss') from dual union all
  4  select TO_date('04-11-2017 01.05.00','dd-mm-yyyy hh24:mi:ss') from dual union all
  5  select TO_date('04-11-2017 02.00.00','dd-mm-yyyy hh24:mi:ss') from dual
  6  )
  7  select to_char(INSERTTS,'hh24') h,count(*) cc
  8  FROM M_P
  9  WHERE INSERTTS >= TO_TIMESTAMP('03-11-2017 18.00.00','dd-mm-yyyy hh24:mi:ss')
 10  AND INSERTTS <= TO_TIMESTAMP('04-11-2017 02.00.00','dd-mm-yyyy hh24:mi:ss')
 11  group by to_char(INSERTTS,'hh24')
 12* order by 1
SQL> /

H          CC
-- ----------
01          1
02          1
18          2



......
stax
5 дек 17, 12:56    [21006929]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
AmKad
Member

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

set sqlnumber off
5 дек 17, 13:09    [21006988]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2787
AmKad
Stax,

set sqlnumber off


SQL) set sqln off
SQL) set sqlp "SQL) "
SQL) ed
Wrote file afiedt.buf

  1  select 1 a
  2  from dual
  3* order by a
SQL) /

         A
----------
         1

SQL)


Вы конечно правы, постить надо без номеров строк, леньтяйство (да и настроение швах)

.....
stax
5 дек 17, 13:28    [21007107]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Если это SQL*Plus, то добавь эту инструкцию в glogin.sql.
5 дек 17, 13:32    [21007128]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2787
AmKad
Если это SQL*Plus, то добавь эту инструкцию в glogin.sql.


не паше
но и неудобно, привык
sql> ed
Wrote file afiedt.buf

  1    select
  2    1
  3    from
  4    dual
  5* union all
sql> 


....
stax
5 дек 17, 14:05    [21007302]     Ответить | Цитировать Сообщить модератору
 Re: не группирует по усечённой дате --- ORA-00979: not a GROUP BY expression  [new]
rtyts
Member

Откуда:
Сообщений: 301
Dshedoo
Ругается на группировку, потому что у тебя ордер идёт по выражению, которое не входит в группировку

Ё моё, вот я балбес.
Работает.
Спасибо!
5 дек 17, 14:51    [21007524]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить