[英]SQL Aggregation Query
我有一個數據集,我需要進行一些聚合才能顯示。
Date, Rank, Vote
07/20/2013, 8, -1
07/21/2013, 8, -1
07/23/2013, 7, -1
07/24/2013, 6, 1
07/25/2013, 7, 1
07/26/2013, 7, -1
07/27/2013, 8, 1
07/28/2013, 8, 1
07/29/2013, 8, -1
我想按連續排名分組,總結投票,並選擇第一個分組日期。 以上數據集將返回:
07/20/2013,8,-2
07/23/2013,7,-1
07/24/2013,6,1
07/25/2013,7,0
07/27/2013,8,1
我的第一個想法是GROUP BY Date和Rank,但這不會合並多天。 事后我可以通過循環數據來執行此操作,或者我可以在存儲過程中使用游標,但我很好奇是否有更簡單的SQL查詢方法。
這樣做:
SELECT firstDate, Rank, SUM(vote) Votes
FROM (
SELECT @first_date := CASE WHEN Rank = @prev_rank
THEN @first_date
ELSE Date
END firstDate,
@prev_rank := Rank curRank,
data.*
FROM (SELECT @first_date := NULL, @prev_rank := NULL) init
JOIN (SELECT Date, Rank, Vote
FROM MyTable
Order by Date) data
) grouped
GROUP BY firstDate, Rank
我能看到的最直接的方式就是你已經指出過的。
使用Group By SQL:
SELECT date, rank, SUM(vote) FROM YourTable
GROUP BY date, rank
小提琴演示: http ://sqlfiddle.com/#!2 / d65d5c / 3
在程序中迭代此記錄集,並執行獲取數據所需的操作。 (如果用編程語言標記問題,我可以告訴你如何)。
所以基本上沒有,我看不出更好的方法來做到這一點。 到目前為止,我可以看到這將導致相當復雜和緩慢的SQL查詢。 但也許有人可以教我更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.