在Vertica中,我们不仅需要按列进行分组,还需要按组内的数据集逐列分组,这样就可以进行自定义分组了吗?
我可能无法正确地提出我的问题,但样本数据和预期的输出将有助于理解我的问题。
示例数据可以使用下面的with创建。
;WITH Sample(DayNo, Amt) AS
(
SELECT 1,10.0 UNION
SELECT 2,15.0 UNION
SELECT 3,9.0 UNION
SELECT 4,6.0 UNION
SELECT 5,15.0 UNION
SELECT 6,5.0 UNION
SELECT 7,2.0 UNION
SELECT 8,1.0 UNION
SELECT 9,8.0 UNION
SELECT 10,4.0
)
SELECT DayNo, Amt FROM Sample ORDER BY DayNo;所以只有2列DayNo (基本上是一个没有时间的日期)和Amt (这是DayNo的数量)。
我想要按DayNo分组的Sum,但要固定的天数。如果我想要连续两天的总和(Amt),那么预期的产出是:
DayNo SUM(Amt)
1-2 25
3-4 15
5-6 20
7-8 3
9-10 12但是,如果我要连续3天的求和(Amt),那么预期的输出是:期望的结果
DayNo SUM(Amt)
1-3 34
4-6 26
7-9 11
10-12 4请注意,对于相同的DayNo,数据可能有多个行,而不仅仅是1。
发布于 2016-02-25 08:46:07
可以使用整数除法按以下方式进行分组:
SELECT CONCAT(CAST((((DayNo - 1) / 3) + 1) * 3 - 2 AS CHAR(4)), '-',
CAST((((DayNo - 1) / 3) + 1) * 3 AS CHAR(4)))
AS DayNo,
SUM(Amt)
FROM Sample
GROUP BY (DayNo-1) / 3这将分组第1,2,3天在一组,第4,5,6天,在下一组。等。
Demo here
https://stackoverflow.com/questions/35621936
复制相似问题