sql - SQL - 仅使用常用值从 2 个不同日期获取平均时间
问题描述
我有一个包含跑步者、时间和日期的数据库。他们跑不同的轨道,但通常距离相同。我想通过仅将某条赛道与同时跑过这两条赛道的跑步者进行比较来了解某条赛道平均需要多长时间,而不仅仅是获得平均水平。因此,例如,仅使用在两个日期都跑步的人来比较 2020 年 2 月 5 日的平均时间与 2020 年 9 月 5 日的平均时间。
这可能吗?
样品表
RUNNER TIME DISTANCE DATE
A 23.40 7 02/05/2020
B 24.28 7 02/05/2020
C 28.90 7 02/05/2020
A 23.60 7 09/05/2020
D 22.80 7 09/05/2020
B 14.30 4 09/05/2020
该声明将需要一个“距离”字段,因为一些跑步者可以跑不同的距离。因此,由于 A 是两个日期和相同距离的唯一跑步者,答案将是 0.2 或 -0.2,这取决于您采用哪种方式,这并不重要。
解决方案
如果我理解正确,给出的是一个距离和两个日期。您想查看两个日期跑完距离的跑步者的时间,并获得两个日期的平均跑步时间差。
您可以通过参加第 1 天和第 2 天的跑步距离来实现这一目标。
with day1 as (select runner, running_time from runs
where distance = 1 and running_date = date '2020-02-05')
, day2 as (select runner, running_time from runs
where distance = 1 and running_date = date '2020-02-09')
select avg(day1.running_time - day2.running_time) average_diff
from day1 join day2 using (runner);
演示:https ://dbfiddle.uk/?rdbms=postgres_12&fiddle=1154af67b35ade42bea8b1e1cd241321
表运行
+----------+--------+--------------+-------------- + | 距离 | 亚军 | 运行日期 | 运行时间 | +----------+--------+--------------+-------------- + | 7 | 1 | 2020-02-05 | 00:20:00 | | 7 | 1 | 2020-02-09 | 00:18:00 | <- 跑步者 1 在第 2 天快了 2 分钟 | 7 | 2 | 2020-02-05 | 00:25:00 | | 7 | 2 | 2020-02-09 | 00:19:00 | <- 跑步者 2 在第 2 天快了 6 分钟 | 7 | 3 | 2020-02-05 | 00:50:00 | <- runner 3 只在第 1 天跑 | 7 | 4 | 2020-02-09 | 00:10:00 | | 9 | 4 | 2020-02-09 | 00:15:00 | <- 跑步者 4 在第 2 天又跑了一段距离 +----------+--------+--------------+-------------- +
结果
+---------------+ | 平均差异 | +---------------+ | 00:04:00 | <- 跑步者 1 = 2 分钟,跑步者 2 = 6 分钟 => 平均 4 分钟 +---------------+
推荐阅读
- php - 从 SQL 表中存储变量以供以后使用 PHP
- python-3.x - uWSGI + Gevent 没有收到来自 Nginx 的请求
- python - 如何在运行单独的 tinter 代码时运行循环
- angular - Angular 可重用的 crud 组件
- javascript - __proto__: Array(0) 在 javascript- ionic firestore 中的含义
- php - mpdf 文件 laravel 5.8 , 播放某些pdf文件而其他正常播放时出现错误 使用框架laravel执行
- docker - 我怎样才能让这个未映射的端口像映射的端口一样工作?
- python - 创建浮点值列表
- python - Groupby 并根据字符串值保留行
- python - 无法使用 python 加载 ecCodes 库