我想对数据进行分组,而没有任何特定标准,只是每个结果组的数据数。我有一张这样的桌子:

DATE              VAL1      VAL2
------------    ------    ------
01-01-2013           5         8
01-02-2013          14        23
01-03-2013          10         6
01-04-2013          21        88
01-05-2013           9        11
01-06-2013           4         9
01-07-2013          19        42
01-08-2013           8         4
01-09-2013          12         1
01-10-2013           2         8
01-11-2013          31        65
01-12-2013           3         6
...


认为日期字段可以是例如数字而不是日期...

我想要的是,例如,获取数据组的总和或平均值,其中组具有特定数量的行(所有组的数量相同)。

例如,对于每组三行,我想要获得VAL1的总和与VAL2的平均值:

INTERVAL                  SUM VAL 1   AVG VAL 2
-----------------------   ---------   ---------
01-01-2013 - 01-03-2013          29        12.3
01-04-2013 - 01-06-2013          34        33.3
01-07-2013 - 01-09-2013          39        15.6
01-10-2013 - 01-12-2013          36        26.3
...


我确实认为可以通过查询进行操作,但是我找不到找到正确的“ group by”语句的方法。有人可以帮我吗?

在此先多谢!

最佳答案

您可以使用row_number函数除以3来为每组3个连续行分配唯一编号。然后,您可以汇总此组号。

select min("DATE") ||'-'||max("DATE"),
       sum(val1),
       avg(val2)
from (
      select "DATE", val1, val2,
             ceil(row_number() over (order by "date") / 3) as grp
      from mytab
    ) as x
group by grp
order by grp;

10-07 15:26