Saya memiliki database dengan pelari, waktu dan tanggal. Mereka menjalankan trek yang berbeda tetapi jarak yang sama biasanya. Saya ingin mengetahui berapa lama rata-rata lintasan tertentu dengan hanya membandingkannya dengan pelari yang telah menjalankan keduanya, daripada hanya mendapatkan rata-rata. Jadi misalnya membandingkan waktu rata-rata pada 02/05/2020 vs waktu rata-rata pada 09/05/2020 dengan hanya menggunakan orang-orang yang berlari pada kedua tanggal tersebut.

Apakah ini mungkin?

Tabel contoh

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

Pernyataan akan membutuhkan bidang "jarak" karena beberapa pelari dapat berlari dengan jarak yang berbeda. Jadi karena A adalah satu-satunya pelari pada tanggal dan jarak yang sama, jawabannya adalah 0,2 atau -0,2, tergantung cara Anda melakukannya, tidak masalah.

1
undecided000 10 Juli 2020, 07:55

1 menjawab

Jawaban Terbaik

Jika saya memahami ini dengan benar, yang diberikan adalah satu jarak dan dua tanggal. Anda ingin melihat waktu pelari yang berlari jarak pada kedua tanggal dan mendapatkan perbedaan waktu lari rata-rata untuk kedua tanggal.

Anda dapat mencapai ini dengan menggabungkan hari 1 dan hari 2 untuk jarak oleh pelari.

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);

Demo: https://dbfiddle.uk/?rdbms=postgres_12&fiddle=1154af67b35ade42bea8b1e

Meja berjalan

+----------+--------+--------------+--------------+
| 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
+----------+--------+--------------+--------------+

Hasil

+--------------+
| average_diff |
+--------------+
| 00:04:00     | <- runner 1 = 2 mins, runner 2 = 6 mins => average 4 mins
+--------------+
2
Thorsten Kettner 10 Juli 2020, 07:13