Kita dapat menggunakan DayName()
fungsi untuk mendapatkan nama hari kerja yang sesuai dengan Tanggal. Kami akan menggunakan hasil fungsi ini untuk membatasi akhir pekan dengan NOT IN ('Saturday', 'Sunday')
.
Selain itu, kita perlu meningkatkan jangkauan generator angka hingga 10 . Karena ada kemungkinan kita dapat menemukan 2 akhir pekan (total 4 hari) di kedua sisi dari 5 hari kerja.
Jadi, kita membutuhkan 2 (pasangan pertama hari akhir pekan) + 5 (hari kerja) + 2 (pasangan kedua hari akhir pekan) + 1 (hari kerja ke-6) =10 tanggal untuk dipertimbangkan. Contoh kasus tepi ini adalah ketika tanggal input adalah hari Minggu.
Kita perlu menggunakan LIMIT 6
untuk membatasi hasil hingga 6 hari saja, dalam kasus non-tepi.
Skema (MySQL v5.7)
CREATE TABLE `HELPER_SEQ` (`I` tinyint(3) UNSIGNED NOT NULL);
INSERT INTO `HELPER_SEQ` (`I`) VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
Kueri
SELECT
DATE_FORMAT((DATE('2018-11-21') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d')
AS VAR
FROM `HELPER_SEQ` AS S
WHERE S.`I` <= 10
AND DAYNAME(DATE_FORMAT((DATE('2018-11-21') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d')) NOT IN ('SATURDAY', 'SUNDAY')
ORDER BY VAR DESC
LIMIT 6;
Hasil
| VAR |
| ---------- |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |
| 2018-11-15 |
| 2018-11-14 |
Demo Kasus Tepi - Tanggal input:25 Nov 2018 (Minggu)
CREATE TABLE `HELPER_SEQ` (`I` tinyint(3) UNSIGNED NOT NULL);
INSERT INTO `HELPER_SEQ` (`I`) VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
Kueri #2
SELECT
DATE_FORMAT((DATE('2018-11-25') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d')
AS VAR
FROM `HELPER_SEQ` AS S
WHERE S.`I` <= 10
AND DAYNAME(DATE_FORMAT((DATE('2018-11-25') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d')) NOT IN ('SATURDAY', 'SUNDAY')
ORDER BY VAR DESC
LIMIT 6;
Hasil
| VAR |
| ---------- |
| 2018-11-23 |
| 2018-11-22 |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |