2012-12-15 47 views
1

这是一个令人困惑的SQL问题(至少对我来说)涉及GROUP BY和AGGREGATES ...会爱上任何帮助。表5中最新5行的聚合函数(SUM)

我在一个网站上记录骑自行车和骑手的信息。我们有一张桌子,其中包含骑手ID,骑车日期和骑行距离。我想要显示最新的游乐设施,距离以及每个车手的总距离。这是我的SQL和输出(其中id是骑手ID):

 
+--------+---------------------+----------+ 
| id  | dated    | distance | 
+--------+---------------------+----------+ 
| 101240 | 2012-11-30 00:00:00 |  250 | 
| 101332 | 2012-11-22 00:00:00 |  31 | 
| 101313 | 2012-11-21 00:00:00 |  15 | 
| 101319 | 2012-11-21 00:00:00 |  25 | 
| 101320 | 2012-11-21 00:00:00 |  56 | 
+--------+---------------------+----------+ 

这是很容易得到有:

SELECT id, dated, distance FROM rides ORDER BY dated LIMIT 5 

似乎我无法弄清楚是获得车手总累计对于这些最新的游乐设施...基本上:

SELECT sum(distance) FROM rides GROUP BY id 

是否有可能在SQL中处理所有这些而不必执行某些程序化的操作?我试过做一些子查询和联接,但无济于事!

在此先感谢SO社区。

+0

我不明白你的问题。 “基本上:SELECT总和(距离)从游乐设施GROUP BY ID。”那有什么问题? –

+0

如果你的意图是总结距离最近五次运行**每个骑自行车的人**你可能想检查排名最高的答案[这里](http://stackoverflow.com/questions/2129693/mysql-using-limit-within -group-通过对获得正的结果,每个组)。 –

+0

那么这个sql服务器还是? –

回答

0

会这样的工作?顺便说一句,什么SQL服务器正在使用?

SELECT sum(distance) 
FROM (SELECT distance FROM rides ORDER BY dated DESC LIMIT 5) 
1

呃,我应该知道我的数据模式好一点。我一直在尝试使用错误的ID列,它实际上是一个序列化的行ID,而不是一个骑手ID。 SQL的(在MySQL)工作版本是:

SELECT r.rider, rr.dated, rr.distance, i.firstname, i.lastname, sum(r.distance) 
FROM rides r 
INNER JOIN (SELECT rider, distance, dated FROM rides ORDER BY dated DESC LIMIT 5) rr ON r.rider = rr.rider 
INNER JOIN riders i ON r.rider = i.id 
GROUP BY r.rider ORDER BY rr.dated DESC; 

这将返回:

 
+-------+---------------------+----------+-----------+----------+-----------------+ 
| rider | dated    | distance | firstname | lastname | sum(r.distance) | 
+-------+---------------------+----------+-----------+----------+-----------------+ 
| 3304 | 2012-11-30 00:00:00 |  250 | venkatesh | ss  |    250 | 
| 647 | 2012-11-22 00:00:00 |  31 | ralph  | suelzle |   22726 | 
| 2822 | 2012-11-21 00:00:00 |  15 | humberto | calderon |   10421 | 
| 2339 | 2012-11-21 00:00:00 |  25 | Judy  | Rutter |   8545 | 
| 1452 | 2012-11-21 00:00:00 |  56 | Fred  | Stearley |   64366 | 
+-------+---------------------+----------+-----------+----------+-----------------+ 

谢谢您的回答!