首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL聚合查询

SQL聚合查询
EN

Stack Overflow用户
提问于 2013-07-26 16:18:25
回答 2查看 116关注 0票数 3

我有一个数据集,需要对其进行一些聚合才能显示。

代码语言:javascript
复制
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

我想按照连续的排名进行分组,总结投票结果,并选择第一个分组日期。上述数据集将返回:

代码语言:javascript
复制
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

我的第一个想法是按日期和等级分组,但这不能巩固好几天。我可以通过循环数据来实现这一点,也可以在存储过程中使用游标,但我很好奇是否有一种更简单的SQL查询方式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-26 16:35:39

这就做到了:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2013-07-26 16:38:31

我能看到的最直截了当的方式,就是你已经指出的。

通过SQL使用:

代码语言:javascript
复制
SELECT  date, rank, SUM(vote) FROM YourTable
GROUP BY date, rank

小提琴演示:http://sqlfiddle.com/#!2/d65d5c/3

在您的程序中迭代这个记录集,并执行获取数据所需的操作。(如果你用编程语言标记你的问题,我可以告诉你怎么做)。

所以基本上不,我找不到更好的方法了。据我所知,这最终将是一个相当复杂和缓慢的SQL查询。但也许有人能教我更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17886292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档