这是一个令人困惑的SQL问题(至少对我而言)涉及GROUP BY
和AGGREGATES ...会喜欢任何帮助。
我在一个记录有关骑自行车和骑车的信息的网站上工作。我们有一张桌子,其中包含骑手ID,骑行日期和骑行距离。我想要显示一张表格,其中包含最新的游乐设施,距离以及每位骑手的总距离。这是我的sql和输出(其中id
是rider 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中处理所有这些而无需执行某些程序化操作?我已经尝试过做一些子查询和JOINS但是没有用!
先谢谢SO社区。
答案 0 :(得分:1)
Duh,我应该更了解我的数据模式。我一直在尝试使用错误的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 | +-------+---------------------+----------+-----------+----------+-----------------+
感谢您的回答!
答案 1 :(得分:0)
这样的事情会起作用吗?顺便说一下,sql server正在使用什么?
SELECT sum(distance)
FROM (SELECT distance FROM rides ORDER BY dated DESC LIMIT 5)