Możemy wykorzystać DayName()
funkcja, aby uzyskać nazwę dnia tygodnia odpowiadającą Dacie. Wykorzystamy wynik tej funkcji, aby ograniczyć weekendy przez NOT IN ('Saturday', 'Sunday')
.
Ponadto będziemy musieli zwiększyć zakres generatora liczb do 10 . Ponieważ istnieje możliwość, że możemy natknąć się na 2 weekendy (w sumie 4 dni) po obu stronach 5 dni roboczych.
Tak więc potrzebujemy 2 (pierwsza para dni weekendowych) + 5 (dni powszednie) + 2 (druga para dni weekendowych) + 1 (6. dzień tygodnia) =10 dat do rozważenia. Przykładem tego skrajnego przypadku może być sytuacja, w której datą wejściową jest niedziela.
Będziemy musieli użyć LIMIT 6
aby ograniczyć wynik tylko do 6 dni, w przypadkach, które nie są skrajne.
Schemat (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);
Zapytanie
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;
Wynik
| VAR |
| ---------- |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |
| 2018-11-15 |
| 2018-11-14 |
Prezentacja przypadku Edge — data wprowadzenia:25 listopada 2018 r. (niedziela)
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);
Zapytanie nr 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;
Wynik
| VAR |
| ---------- |
| 2018-11-23 |
| 2018-11-22 |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |