2016-02-25 19 views
0

是否可以在Vertica中进行自定义分组?我们需要按组列不仅分组而是按列分组数据?SQL group by按列自定义分组集

我可能无法正确显示我的问题,但示例数据和预期输出将有助于理解我的问题。

可以使用下面的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)。

我想Sum(Amt)按DayNo分组,但是按天设置。对于如: 如果我想总和(AMT)的一组连续2天,那么预期输出是:

DayNo SUM(Amt) 
1-2  25 
3-4  15 
5-6  20 
7-8  3 
9-10 12 

但是如果我想总和(AMT)的一组连续3天,然后预期成果是: 所需的结果

DayNo SUM(Amt) 
1-3  34 
4-6  26 
7-9  11 
10-12 4 

注意,数据可能有相同的DayNo多行不只是1

回答

1

您可以通过使用整数除法到组:

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

+0

谢谢@Giorgos – Sarang