【发布时间】:2018-02-19 18:19:22
【问题描述】:
我正在做一个查询,获取 2 列的计数和另一列的总和,从过去 13 个月的日期列按月份分组。这是我的查询:
SELECT TO_CHAR(colDate,'yyyy_MM') as month ,
COUNT(DISTINCT col1) AS col1,
COUNT(DISTINCT col2) as col2,
SUM(col3) as col3
FROM myTable
WHERE TO_CHAR(colDate,'yyyy_MM') IN (select distinct TO_CHAR(colDate,'yyyy_MM')
from myTable
order by 1 desc
limit 13)
GROUP BY 1
问题是对于每个月,我还需要前3个月的平均值:
COUNT(DISTINCT col1) AS col1, COUNT(DISTINCT col2) 作为 col2, SUM(col3) as col3
所以我的查询需要是这样的:
SELECT TO_CHAR(colDate,'yyyy_MM') as month ,
COUNT(DISTINCT col1) AS col1,
COUNT(DISTINCT col2) as col2,
SUM(col3) as col3,
... as PreviousMonthsAvgCol1,
... as PreviousMonthsAvgCol2,
... as PreviousMonthsAvgCol3
FROM myTable
WHERE TO_CHAR(colDate,'yyyy_MM') IN (select distinct TO_CHAR(colDate,'yyyy_MM')
from myTable
order by 1 desc
limit 13)
GROUP BY 1
第一个月之前的月份仍需计入第一个月的平均值。
【问题讨论】:
-
结果集中的第一个月怎么样?
-
不确定您是否使用 MS SQL Server,但您是否考虑过创建 UDF(用户定义函数)来接受参数以计算特定时间跨度的平均值?对于较大的数据集,这可能会导致性能滞后,但可能值得考虑。
-
第一次之前的月份需要计入平均值。
-
我想我会让我的查询得到 16 个月并计算我的应用程序中的所有内容。
标签: sql amazon-redshift