2012-06-13 55 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

相關問題