SQL-仅使用公共值获取两个不同日期的平均时间

SQL-仅使用公共值获取两个不同日期的平均时间,sql,postgresql,Sql,Postgresql,我有一个关于跑步者、时间和日期的数据库。他们跑不同的路线,但通常是相同的距离。我想通过与同时跑过这两条赛道的跑步者进行比较,而不仅仅是得到平均值,来了解某条赛道平均需要多长时间。例如,只使用在两个日期跑步的人,比较2020年5月2日的平均时间与2020年5月9日的平均时间 这可能吗 样本表 RUNNER TIME DISTANCE DATE A 23.40 7 02/05/2020 B 24.28 7 02/05/2020 C

我有一个关于跑步者、时间和日期的数据库。他们跑不同的路线,但通常是相同的距离。我想通过与同时跑过这两条赛道的跑步者进行比较,而不仅仅是得到平均值,来了解某条赛道平均需要多长时间。例如,只使用在两个日期跑步的人,比较2020年5月2日的平均时间与2020年5月9日的平均时间

这可能吗

样本表

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,这取决于你的跑步方式,这并不重要。

如果我理解正确,给定的是一个距离和两个日期。您需要查看在两个日期跑步的跑步者的时间,并获得两个日期的平均跑步时间差

您可以通过加入跑步者第一天和第二天的距离来实现这一目标

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);
演示:

表运行 +----------+--------+--------------+--------------+ |距离|跑步者|跑步日期|跑步时间| +----------+--------+--------------+--------------+ | 7 | 1 | 2020-02-05 | 00:20:00 |
|7 | 1 | 2020-02-09 | 00:18:00 |何“但通常相同的距离”起作用?我们必须这样考虑吗?请展示一些样本数据(比如两个日期,四个跑步者,四首曲目,一些只由一些跑步者跑步,一些由所有跑步者跑步)和预期结果。很抱歉缺少信息,我现在已经更新了原始帖子。 +----------+--------+--------------+--------------+ | distance | runner | running_date | running_time | +----------+--------+--------------+--------------+ | 7 | 1 | 2020-02-05 | 00:20:00 | | 7 | 1 | 2020-02-09 | 00:18:00 | <- runner 1 was 2 mins faster on day 2 | 7 | 2 | 2020-02-05 | 00:25:00 | | 7 | 2 | 2020-02-09 | 00:19:00 | <- runner 2 was 6 mins faster on day 2 | 7 | 3 | 2020-02-05 | 00:50:00 | <- runner 3 only ran on day 1 | 7 | 4 | 2020-02-09 | 00:10:00 | | 9 | 4 | 2020-02-09 | 00:15:00 | <- runner 4 ran another distance on day 2 +----------+--------+--------------+--------------+ +--------------+ | average_diff | +--------------+ | 00:04:00 | <- runner 1 = 2 mins, runner 2 = 6 mins => average 4 mins +--------------+