问题描述
我正在编写一个 SQL 来创建一个日历表,如下所示,并收到错误“属性 T1.CALENDAR_DATE 必须在聚合函数中分组或使用
我写的代码是
WITH CALENDAR AS
(
SELECT
EXTRACT(EPOCH FROM DATE(NOW()-1)-T1.CALENDAR_DATE)/7 AS ROLLING_WEEK,MIN(T1.WEEK_OF_YEAR) AS WEEK,MAX(T1.CALENDAR_DATE) AS LAST_DAY_WEEK,MIN(T1.CALENDAR_DATE) AS FIRST_DAY_WEEK
FROM DIM_GINZ_DATE AS T1
WHERE T1.ROLLING_MONTH BETWEEN 0 AND 84
GROUP BY T1.ROLLING_WEEK
)
SELECT *
FROM CALENDAR
这里会出现什么问题?
谢谢:)
解决方法
您应该在 T1.CALENDAR_DATE
中使用 GROUP by
或在 EXTRACT(EPOCH FROM DATE(NOW()-1)-T1.CALENDAR_DATE)/7
上使用一些聚合函数
WITH CALENDAR AS
(
SELECT
EXTRACT(EPOCH FROM DATE(NOW()-1)-T1.CALENDAR_DATE)/7 AS ROLLING_WEEK,-- something like this need to be implemented if you dont want to group by T1.CALENDAR_DATE
-- EXTRACT(EPOCH FROM DATE(NOW()-1)-MIN(T1.CALENDAR_DATE))/7 AS ROLLING_WEEK
MIN(T1.WEEK_OF_YEAR) AS WEEK,MAX(T1.CALENDAR_DATE) AS LAST_DAY_WEEK,MIN(T1.CALENDAR_DATE) AS FIRST_DAY_WEEK
FROM DIM_GINZ_DATE AS T1
WHERE T1.ROLLING_MONTH BETWEEN 0 AND 84
GROUP BY T1.ROLLING_WEEK,T1.CALENDAR_DATE -- like this
-- or use EXTRACT(EPOCH FROM DATE(NOW()-1)-T1.CALENDAR_DATE)/7
)
SELECT *
FROM CALENDAR
如果未在 select
子句中使用,则不能在 group by
子句中使用未聚合列。