SQL - получить среднее время для 2 разных дат, используя только общие значения - PullRequest
1 голос
/ 10 июля 2020

У меня есть база данных с бегунами, временем и датой. Они бегут по разным трассам, но обычно на одинаковое расстояние. Я хочу выяснить, сколько времени занимает в среднем определенная дорожка, сравнивая ее только с бегунами, которые пробежали оба, а не просто получать среднее значение. Так, например, сравните среднее время 05.02.2020 со средним временем 09.05.2020, используя только людей, которые бегали в обе даты.

Возможно ли это?

Пример таблицы

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

Для этого оператора потребуется поле «расстояние», поскольку некоторые бегуны могут бегать на разные дистанции. Так как А - единственный бегун в обе даты и на одно и то же расстояние, ответ будет 0,2 или -0,2, в зависимости от того, каким способом вы это сделаете, это не имеет значения.

1 Ответ

2 голосов
/ 10 июля 2020

Если я правильно понимаю, даны одно расстояние и две даты. Вы хотите посмотреть время бегунов, которые пробежали дистанцию ​​в обе даты, и получить среднюю разницу во времени бега для этих двух дат.

Вы можете достичь этого, объединив день 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

таблица запускается

+----------+--------+--------------+--------------+
| 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
+--------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...