Saya seorang pemula, dan saya tidak dapat menemukan cara yang baik untuk melakukan ini di mana saja. Saya memiliki tabel database yang berisi statistik yang direkam pada berbagai waktu sepanjang minggu. Minggu pelaporan dimulai pada hari Kamis. Tabel berisi kolom datestamp (tanggal) yang menyimpan ketika data direkam.
Saya perlu menarik data selama satu minggu tertentu (minggu pelaporan dimulai pada Kamis). Saya telah menulis pertanyaan berikut:
SELECT *
FROM `table`
WHERE 1 = CASE
WHEN WEEKDAY(NOW()) = 0 THEN DATEDIFF(NOW(),`date`) BETWEEN -2 AND 4
WHEN WEEKDAY(NOW()) = 1 THEN DATEDIFF(NOW(),`date`) BETWEEN -1 AND 5
WHEN WEEKDAY(NOW()) = 2 THEN DATEDIFF(NOW(),`date`) BETWEEN -0 AND 6
WHEN WEEKDAY(NOW()) = 3 THEN DATEDIFF(NOW(),`date`) BETWEEN -6 AND 0
WHEN WEEKDAY(NOW()) = 4 THEN DATEDIFF(NOW(),`date`) BETWEEN -5 AND 1
WHEN WEEKDAY(NOW()) = 5 THEN DATEDIFF(NOW(),`date`) BETWEEN -4 AND 2
WHEN WEEKDAY(NOW()) = 6 THEN DATEDIFF(NOW(),`date`) BETWEEN -3 AND 3
END
Ini tampaknya bekerja pada pengujian awal. Tapi saya tidak yakin itu cara terbaik untuk melakukannya. Saya tidak tahu banyak tentang kinerja MySQL, tetapi akan ada lebih dari seratus ribu catatan untuk disaring. Apakah permintaan ini sangat lambat karena jumlah kondisi yang diperiksa?
Fungsi SEKARANG () digunakan ketika menarik laporan terbaru - namun, itu beberapa kasus saya perlu melakukan laporan untuk minggu lain - jadi saya akan mengganti tanggal lain ke tempat itu.
Selain itu, melakukannya dengan cara ini membutuhkan penulisan ulang kueri jika minggu pelaporan berubah - katakanlah hari awal berubah menjadi Rabu.
Saya tidak dapat menggunakan fungsi MINGGU () karena Anda hanya dapat memulai seminggu di Sun atau Mon dengan itu.
Setiap ide untuk meningkatkan kueri ini sangat dihargai!
Catatan Lain: Saat ini menggunakan MariaDB 5.3.