1

这是一个令人费解的 SQL 问题(至少对我而言),涉及GROUP BY和 AGGREGATES... 希望得到任何帮助。

我在一个记录有关自行车骑行和骑手信息的网站上工作。我们有一个表格,其中包含乘客 ID、骑行日期和骑行距离。我想显示一张表格,其中包含最新的游乐设施和距离,以及每个骑手的总距离。这是我的 sql 和输出(id骑手 id 在哪里):

+--------+----------+----------+
| 编号 | 过时 | 距离 |
+--------+----------+----------+
| 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 社区。

4

2 回答 2

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;

这将返回:

+--------+----------+----------+-------- ---+----------+------------------+
| 骑手 | 过时 | 距离 | 名字 | 姓氏 | 总和(r.距离)|
+--------+----------+----------+-------- ---+----------+------------------+
| 3304 | 2012-11-30 00:00:00 | 250 | 文卡特什 | 不锈钢 | 250 |
| 第647章 2012-11-22 00:00:00 | 31 | 拉尔夫 | 苏尔兹尔 | 22726 |
| 2822 | 2012-11-21 00:00:00 | 15 | 亨贝托 | 卡尔德隆| 10421 |
| 第2339章 2012-11-21 00:00:00 | 25 | 朱迪 | 拉特 | 8545 |
| 第1452章 2012-11-21 00:00:00 | 56 | 弗雷德 | 斯蒂尔利 | 64366 |
+--------+----------+----------+-------- ---+----------+------------------+

感谢您的回答!

于 2012-12-18T01:32:32.550 回答
0

像这样的东西会起作用吗?顺便说一句,使用的是什么 sql server?

SELECT sum(distance) 
FROM (SELECT distance FROM rides ORDER BY dated DESC LIMIT 5)
于 2012-12-15T00:31:00.377 回答