Můžeme použít DayName()
funkce pro získání názvu dne v týdnu odpovídajícímu datu. Výsledek této funkce využijeme k omezení víkendů na NOT IN ('Saturday', 'Sunday')
.
Také budeme muset zvýšit rozsah generátoru čísel až na 10 . Protože existuje možnost, že můžeme narazit na 2 víkendy (celkem 4 dny) na obě strany 5 pracovních dnů.
Potřebujeme tedy 2 (první pár víkendových dnů) + 5 (pracovní dny) + 2 (druhý pár víkendových dnů) + 1 (6. pracovní den) =10 dat, které je třeba vzít v úvahu. Příkladem tohoto okrajového případu by bylo, když je vstupní datum neděle.
Budeme muset použít LIMIT 6
omezit výsledek pouze na 6 dní v případech, které nejsou okrajové.
Schéma (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);
Dotaz
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;
Výsledek
| VAR |
| ---------- |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |
| 2018-11-15 |
| 2018-11-14 |
Ukázka pouzdra Edge – datum zadání:25. listopadu 2018 (neděle)
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);
Dotaz č. 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;
Výsledek
| VAR |
| ---------- |
| 2018-11-23 |
| 2018-11-22 |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |