簡體   English   中英

SQL聚合查詢

[英]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

SQLFIDDLE

我能看到的最直接的方式就是你已經指出過的。

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM