Sql 离子与合格计数功能给我不同的结果。我应该使用的数据清理规则是:“仅当我的存储中这组数据的日期-月份标签出现在该存储中至少有20天数据的日期-月份标签列表中时,才将该数据包括在我的计算中。”这使得我将年和月添加到子查询中,这再次导致月和年的重用:(我忘了将年
Sql 离子与合格计数功能给我不同的结果。我应该使用的数据清理规则是:“仅当我的存储中这组数据的日期-月份标签出现在该存储中至少有20天数据的日期-月份标签列表中时,才将该数据包括在我的计算中。”这使得我将年和月添加到子查询中,这再次导致月和年的重用:(我忘了将年,sql,teradata,Sql,Teradata,离子与合格计数功能给我不同的结果。我应该使用的数据清理规则是:“仅当我的存储中这组数据的日期-月份标签出现在该存储中至少有20天数据的日期-月份标签列表中时,才将该数据包括在我的计算中。”这使得我将年和月添加到子查询中,这再次导致月和年的重用:(我忘了将年/月添加到限定中,无需将其添加到选择列表:QUALIFY COUNT(*)OVER(按存储区划分,提取(从saledate算起的年),提取(从saledate算起的月))>19应该有效谢谢!这个限定计数函数似乎是一个非常巧妙的技巧! SELEC
离子与合格计数功能给我不同的结果。我应该使用的数据清理规则是:“仅当我的存储中这组数据的日期-月份标签出现在该存储中至少有20天数据的日期-月份标签列表中时,才将该数据包括在我的计算中。”这使得我将年和月添加到子查询中,这再次导致月和年的重用:(我忘了将年/月添加到限定中,无需将其添加到选择列表:
QUALIFY COUNT(*)OVER(按存储区划分,提取(从saledate算起的年),提取(从saledate算起的月))>19
应该有效谢谢!这个限定计数函数似乎是一个非常巧妙的技巧!
SELECT EXTRACT(MONTH FROM trnsact.saledate)||EXTRACT(YEAR FROM trnsact.saledate) AS MonthYear,
SUM(trnsact.amt)/COUNT(DISTINCT trnsact.saledate) AS AvgSales
FROM (SELECT EXTRACT(MONTH FROM saledate)||EXTRACT(YEAR FROM saledate) AS MonthYear, store
FROM trnsact
HAVING COUNT(DISTINCT SALEDATE)>19
GROUP BY MonthYear, store) AS cleaned
JOIN trnsact ON cleaned.MonthYear=MonthYear AND cleaned.store=trnsact.store
WHERE STYPE='P' AND saledate < '2005-08-01'
GROUP BY MonthYear
ORDER BY AvgSales;
SELECT EXTRACT(MONTH FROM trnsact.saledate) as mon,
EXTRACT(YEAR FROM trnsact.saledate) AS yr,
SUM(trnsact.amt)/COUNT(DISTINCT trnsact.saledate) AS AvgSales
FROM
(
SELECT EXTRACT(MONTH FROM saledate) as mon2,
EXTRACT(YEAR FROM saledate) AS yr2, store
FROM trnsact
-- fixed the order, Teradata allows that wrong order, but it's really confusing
GROUP BY mon2, yr2, store
HAVING COUNT(DISTINCT SALEDATE)>19
) AS cleaned
JOIN trnsact
ON cleaned.mon2=mon
AND cleaned.yr2=yr
AND cleaned.store=trnsact.store
WHERE STYPE='P'
AND saledate < DATE '2005-08-01' -- using a date literal is safe
GROUP BY yr,mon
ORDER BY AvgSales;
SELECT
EXTRACT(YEAR FROM saledate) AS yr
,EXTRACT(MONTH FROM saledate) AS mon
-- = SUM(trnsact.amt)/COUNT(DISTINCT trnsact.saledate)
,SUM(sumamt)/COUNT(DISTINCT saledate) AS AvgSales
FROM
(
SELECT saledate, store, SUM(amt) AS sumamt
FROM sales_fact
WHERE STYPE='P'
AND saledate < DATE '2005-08-01' -- using a date literal is safe
GROUP BY 1, 2
-- = HAVING COUNT(DISTINCT SALEDATE) > 19
QUALIFY COUNT(*) OVER (PARTITION BY store_id) > 19
) AS cleaned
GROUP BY 1, 2
ORDER BY AvgSales;