2012-06-13 57 views
3

我有一个定期测量的SQL表。我希望能够在值列上返回一些汇总方法(比如说SUM),一次可以返回任意数量的行。所以,如果我有通过任意数量的行对SQL查询进行分区

id | reading 
1  10 
5  14 
7  10 
11  12 
13  18 
14  16 

我可以一次总结超过2行,得到(24,22,34),我也可以在同一时间总结3行获得(34,46),如果使感。请注意,ID可能不是连续的 - 我只是想按行计数操作,按照排序顺序。

在现实世界中,标识符是一个时间戳,但我认为(可能在应用unix_timestamp()调用后)任何适用于上述简单情况的东西都应该适用。如果它很重要,我会优雅地缩放为情节查询返回的结果数量 - 也许有更聪明的方法来做到这一点?我希望解决方案是一般的,而不是在数据上强加特定的存储机制/模式。

+0

,这将是与用户定义的聚合函数的窗口函数。 – Randy

+0

也检查'ntile' – Randy

+0

不知道我跟着 - 你按列分组,而不是行。如果你想要任意数量的行,肯定会成为'WHERE'(或'HAVING')子句中的一个参数? – Widor

回答

2

您可能resequense查询结果,然后组它

SET @seq = 0; 

SELECT SUM(data), ts FROM (
    SELECT @seq := @seq + 1 AS seq, data, ts FROM table ORDER BY ts LIMIT 50 
) AS tmp GROUP BY floor(tmp.seq/3); 
Oracle中
+0

我可能误解了这一点。这将分组成3行的分区,因为前3行(seq = 0,1,2)在group by子句中的值为0,seq = 3,4,5等的值为1。我一开始并没有明白,但它真的很聪明! – Coderer

相关问题