选择日期Teradata SQL assistant时按月分组
我想知道2017年每个月的唯一用户总数。我试过:选择日期Teradata SQL assistant时按月分组,sql,teradata,Sql,Teradata,我想知道2017年每个月的唯一用户总数。我试过: 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, SU
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
但这会返回一个错误。每月检索用户ID、广告和印象总数的最有效代码是什么 按用户进行聚合对我来说没有意义,因为你要计算的是用户。尝试仅按月份和年份分组:
GROUP BY EXTRACT(MONTH FROM datum), 2
选择
提取(从事件|DT开始的年份)||'-'||提取(从事件|DT开始的月份)作为月份,
计数(不同的CLSFD用户ID)作为用户ID的数量,
将(不同的CLSFD\u CAS\u AD\u ID)计数为广告的数量,
作为印数的总和(改进)
从clsfd\u访问\u视图。clsfd\u CAS\u AD\u HST
哪里
CLSFD_站点ID=3001和
基准>='2017-01-01'和基准<'2018-01-01'
分组
摘录(从事件开始的年份)| |'-'| |摘录(从事件开始的月份);
请注意,我更改了您对
数据的限制,以便也排除任何大于2017年的年份。如果您希望此值包含在当前查询中,则应使用分析函数。例如,“每个月的唯一用户总数”类似于:
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);
请注意,这些值将对每个用户重复。有一个小问题,即您不再有“数据”,因此无法在WHERE语句中引用该数据。但是我现在正在尝试你的建议,愚蠢的是我自己没有想到。@StephenTheunissen在WHERE
子句中有datum
不是问题,因为WHERE
子句在发生groupby
之前在整个表上求值。Teradata不允许在OLAP函数中使用distinct
select count(distinct user_id) over(partition by EXTRACT(MONTH FROM datum))