我试图用PL/SQL获取每一天的统计数据.
每天有几个条目,错误的bukkets :-)我想按天分组.
我现在在做什么:
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY MONTH, DAY, errormessage
Run Code Online (Sandbox Code Playgroud)
这导致ORA-00904:"DAY":无效的标识符(在组上停止).
有帮助吗?:d
Erk*_*lat 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
Run Code Online (Sandbox Code Playgroud)
列别名没有用GROUP BY,你需要完整的表达式.
你的问题是范围问题。该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
Run Code Online (Sandbox Code Playgroud)
这是另一个:
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
Run Code Online (Sandbox Code Playgroud)
请注意,某些数据库(包括 MySQL、PostgreSQL 等)确实允许从子句中的投影引用列别名GROUP BY。但在更严格的 SQL 方言(例如 Oracle)中,这是不可能的