MySQL:一场比赛中跑步者的平均时间

MySQL:一场比赛中跑步者的平均时间,mysql,time,average,period,Mysql,Time,Average,Period,也许我没有使用正确的词,但我没有找到搜索框的解决方案。 我和很多跑步者比赛。每个跑步者都跑了7/12圈。我有一项跑步记录。 例如: +------+-----------+---------------------+ | id. | id.runner | lapse time | +------+-----------+---------------------+ | 1 | 2 | 2019-12-16 09:24:10 | | 2 | 7

也许我没有使用正确的词,但我没有找到搜索框的解决方案。 我和很多跑步者比赛。每个跑步者都跑了7/12圈。我有一项跑步记录。 例如:

+------+-----------+---------------------+
| id.  | id.runner | lapse time          |
+------+-----------+---------------------+
| 1    | 2         | 2019-12-16 09:24:10 |
| 2    | 7         | 2019-12-16 09:24:20 |
| 3    | 4         | 2019-12-16 09:24:30 |
| 4    | 2         | 2019-12-16 09:25:10 |
| 5    | 7         | 2019-12-16 09:25:30 |
| 6    | 4         | 2019-12-16 09:25:50 |
| 7    | 2         | 2019-12-16 09:26:10 |
| 8    | 7         | 2019-12-16 09:26:40 |
| 9    | 4         | 2019-12-16 09:27:10 |
| 10   | 2         | 2019-12-16 09:27:10 |
+------+-----------+---------------------+
如果可能的话,我需要一个查询来获取跑步者的平均时间,这里: 2:60秒 7:70秒 4:80秒

另一个是求平均时间的平均值,这里: (60+70+80)/3=70


我尝试了很多查询,但结果总是错误的。

您可以使用
LEAD
TIMESTAMPDIFF
的组合来查找每对圈速,然后计算它们的差异:

SELECT
    id_runner,
    AVG(diff) AS avg_lap_time
FROM
(
    SELECT
        id_runner,
        TIMESTAMPDIFF(SECOND,
                      lapse,
                      LEAD(lapse) OVER (PARTITION BY id_runner ORDER BY lapse)) AS diff
    FROM yourTable
) t
GROUP BY
    id_runner;

在最后一圈时,
LEAD
将为
NULL
,因此整个差异计算也将为
NULL
。但是,这是可以接受的,因为这样它将从平均计算中消失(即,它将被忽略)

请注意,如果您使用的MySQL早期版本不支持LEAD,我们可以使用分析函数来查找下一个连续的圈速

SELECT
    id_runner,
    AVG(diff) AS avg_lap_time
FROM
(
    SELECT
        id_runner,
        TIMESTAMPDIFF(SECOND,
                      lapse,
                      (SELECT t2.lapse FROM yourTable t2
                       WHERE t2.id_runner = t1.id_runner AND t2.lapse > t1.lapse
                       ORDER BY t2.lapse LIMIT 1)) AS diff
    FROM yourTable t1
) t
GROUP BY
    id_runner;

你能发布你到目前为止尝试过的查询吗?不可能:“#1064-你的SQL语法有错误;请检查与MySQL服务器版本对应的手册,以获得正确的语法,以便在第10行使用接近“OVER(按id划分运行程序顺序)),作为与表中的差异)t”。我在MySQL 5.1.73上运行,没有choice@user3726755试试我答案的第二个版本,它应该可以在你的MySQL版本上运行。很好!谢谢你的回复