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;