Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengenalpasti Julat Tarikh Bertindih dalam PostgreSQL untuk Keahlian Pasukan Pemain?

Bagaimana untuk Mengenalpasti Julat Tarikh Bertindih dalam PostgreSQL untuk Keahlian Pasukan Pemain?

Patricia Arquette
Lepaskan: 2025-01-04 09:30:35
asal
229 orang telah melayarinya

How to Identify Overlapping Date Ranges in PostgreSQL for Player Team Membership?

Mengenalpasti Julat Tarikh Bertindih dalam PostgreSQL

Masalah

Seorang pengguna berusaha untuk mendapatkan semula senarai pemain yang dimiliki oleh pasukan tertentu dalam julat tahun tertentu. Pertanyaan yang dicadangkan pada mulanya adalah seperti berikut:

SELECT * 
FROM   contract 
JOIN   team USING (name_team) 
JOIN   player USING(name_player) 
WHERE  name_team = ? 
AND    DATE_PART('YEAR',date_join)>= ? 
AND    DATE_PART('YEAR',date_leave)<= ?
Salin selepas log masuk

Walau bagaimanapun, pertanyaan ini tidak mengenal pasti julat tarikh bertindih dengan berkesan.

Penyelesaian Betul

Kepada menentukan julat tarikh bertindih dengan tepat, pertanyaan mesti diubah suai untuk mempertimbangkan perkara berikut kriteria:

  1. Pemain yang menyertai pasukan sebelum permulaan julat tahun yang ditentukan.
  2. Pemain yang tidak meninggalkan pasukan sebelum akhir julat tahun yang ditentukan.
  3. Pemain yang tidak pernah meninggalkan pasukan (diwakili oleh NULL date_leave nilai).

Pertanyaan Dioptimumkan

Pertanyaan berikut menyediakan penyelesaian yang lebih tepat:

SELECT DISTINCT name_player 
FROM   contract
WHERE  name_team = ? 
AND    (date_join, COALESCE(date_leave, CURRENT_DATE)) OVERLAPS
       (date '2009-01-01', date '2010-01-01');  -- upper bound excluded
Salin selepas log masuk

Penjelasan

  • Fungsi COALESCE digunakan untuk mengendalikan NULL date_leave nilai, menganggapnya sebagai julat terbuka.
  • Operator OVERLAPS secara automatik menetapkan permulaan setiap selang sebagai nilai awal pasangan.
  • Julat tarikh '[2009-01-01,2010- 01-01)' mewakili selang separuh terbuka, tidak termasuk bahagian atas terikat.

Pertimbangan Tambahan

  • Dalam PostgreSQL 9.2 atau lebih baru, jenis julat boleh digunakan dengan sokongan indeks, memberikan prestasi yang lebih baik untuk berasaskan julat pertanyaan.
  • Pertanyaan yang disediakan boleh dioptimumkan lagi dengan mencipta indeks ungkapan pada ungkapan daterange(date_join, date_leave).

Atas ialah kandungan terperinci Bagaimana untuk Mengenalpasti Julat Tarikh Bertindih dalam PostgreSQL untuk Keahlian Pasukan Pemain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan