选择日期时按月分组 Teradata SQL 助手

GROUP BY month when selecting a date Teradata SQL assistant

SELECT EVENT_DT - ((EVENT_DT -DATE'1900-01-07') MOD 7) AS dates,
       CLSFD_USER_ID AS user_id, 
       COUNT(DISTINCT CLSFD_USER_ID) AS number_of_user_ids,
       COUNT(DISTINCT CLSFD_CAS_AD_ID) AS number_of_ads,
       SUM(IMPRSN_CNT) AS number_of_impressions
FROM clsfd_access_views.CLSFD_CAS_AD_HST
WHERE CLSFD_SITE_ID = 3001
AND datum >= '2017-01-01'
GROUP BY 1,2

我想知道 2017 年每个月的独立用户总数。我试过:

GROUP BY EXTRACT(MONTH FROM datum), 2

但是这returns一个错误。每月检索用户 ID、广告和印象总数的最有效代码是什么。

按用户汇总对我来说没有意义,因为他们是您要统计的。尝试单独按月和年分组:

SELECT
    EXTRACT(YEAR FROM EVENT_DT) || '-' || EXTRACT(MONTH FROM EVENT_DT) AS month,
    COUNT(DISTINCT CLSFD_USER_ID) AS number_of_user_ids,
    COUNT(DISTINCT CLSFD_CAS_AD_ID) AS number_of_ads,
    SUM(IMPRSN_CNT) AS number_of_impressions
FROM clsfd_access_views.CLSFD_CAS_AD_HST
WHERE
    CLSFD_SITE_ID = 3001 AND
    datum >= '2017-01-01' AND datum < '2018-01-01'
GROUP BY
    EXTRACT(YEAR FROM EVENT_DT) || '-' || EXTRACT(MONTH FROM EVENT_DT);

请注意,我更改了您对 datum 的限制,以排除任何大于 2017 年的年份。

如果您希望这些值包含在当前查询中,那么您应该使用分析函数。例如 "total number of unique users during each month" 会是这样的:

select count(distinct user_id) over(partition by EXTRACT(MONTH FROM datum))

请注意,每个用户都会重复这些值。