Вопрос по sql – Как группировать по дням в PL / SQL?

8

Я пытаюсь получить статистику за каждый день с PL / SQL.

Каждый день есть несколько записей, наборов ошибок :-) Я хочу сгруппировать их по дням.

Что я сейчас делаю:

<code>SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY MONTH, DAY, errormessage
</code>

Это приводит к ORA-00904: «ДЕНЬ»: неверный идентификатор (останавливается на группе по).

Любая помощь? : D

Ваш Ответ

3   ответа
18
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY TO_CHAR(dateTime, 'DD'), TO_CHAR(dateTime, 'MM'), errormessage

GROUP BYВам нужно полное выражение.

Спасибо! Прием через 8 мин: D Jason94
Спасибо за кредиты ;-)
Рад помочь, и вам также следует проверить ответ @Lukas Eder, в некоторых случаях его решение лучше для удобства чтения.
2
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP by TO_CHAR(dateTime, 'DD'), TO_CHAR(dateTime, 'MM'), errormessage

4

GROUP BY Предложение является частью табличного выражения оператора и, таким образом, оценивается доSELECT пункт, то есть проекция. Это означает, что ваши прогнозируемые псевдонимы не доступны во время группировки. Это одно решение

SELECT DAY, MONTH, errormessage
FROM (
  SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
  FROM log
  WHERE (...)
)
GROUP BY MONTH, DAY, errormessage

это другое:

SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY TO_CHAR(dateTime, 'MM'), TO_CHAR(dateTime, 'DD'), errormessage
Non-standard behaviour

Обратите внимание, что некоторые базы данных (включая MySQL, PostgreSQL и другие) позволяют ссылаться на псевдонимы столбцов из проекции вGROUP BY пункт. В более строгих диалектах SQL (таких как Oracle) это не должно быть возможным, хотя

Похожие вопросы