Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengekstrak Data dengan Tarikh Hilang daripada Jadual MySQL Menggunakan Jadual Kalendar?

Bagaimanakah Saya Boleh Mengekstrak Data dengan Tarikh Hilang daripada Jadual MySQL Menggunakan Jadual Kalendar?

Linda Hamilton
Linda Hamiltonasal
2024-12-07 00:52:11349semak imbas

How Can I Extract Data with Missing Dates from a MySQL Table Using a Calendar Table?

Mengekstrak Data dengan Tarikh Hilang Menggunakan Jadual Kalendar

Pengenalan:

Tugas yang sedang dijalankan melibatkan pengambilan data daripada MySQL jadual yang merangkumi nilai berkaitan tarikh. Matlamatnya adalah untuk memilih semua data yang termasuk dalam julat tarikh yang ditentukan, termasuk keadaan apabila data tiada untuk tarikh tertentu.

Pertanyaan:

Pertanyaan yang disediakan, SELECT data DARI tbl MANA tarikh ANTARA tarikh1 DAN tarikh2, secara berkesan memilih data dalam julat yang ditetapkan. Walau bagaimanapun, ia gagal mengambil kira tarikh kosong dalam selang waktu tersebut.

Penyelesaian:

Untuk menangani isu ini, konsep "jadual kalendar" boleh digunakan. Jadual ini menyediakan cara berstruktur untuk mewakili tarikh, membolehkan manipulasi mudah dan kemasukan tarikh yang hilang.

Pelaksanaan Jadual Kalendar:

Kod MySQL berikut boleh digunakan untuk buat jadual kalendar:

CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

Untuk menjana jadual kalendar yang menjangkau tarikh yang ditentukan julat:

SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY as date
FROM ints a JOIN ints b
ORDER BY a.i * 10 + b.i

Pertanyaan ini akan menjana senarai tarikh dalam julat '2009-06-25' dan '2009-07-01'.

Menggabungkan Kalendar dan Jadual Data:

Di sebelah kiri menyertai jadual kalendar ('cal') dengan jadual asal ('tbl') pada medan 'tarikh', kita boleh memperoleh hasil yang diingini:

SELECT cal.date, tbl.data
FROM (
    SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY as date
    FROM ints a JOIN ints b
    ORDER BY a.i * 10 + b.i
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';

Pertanyaan ini akan mengembalikan semua tarikh dalam julat yang ditentukan, termasuk yang mempunyai nilai data kosong (yang akan dipaparkan sebagai NULL).

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekstrak Data dengan Tarikh Hilang daripada Jadual MySQL Menggunakan Jadual Kalendar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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