2012-12-15 77 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 | 
+-------+---------------------+----------+-----------+----------+-----------------+ 

謝謝您的回答!