Mysql
 sql >> Base de données >  >> RDS >> Mysql

Retour sur les dates sans week-end

Nous pouvons utiliser DayName() pour obtenir le nom du jour de la semaine correspondant à une Date. Nous utiliserons le résultat de cette fonction pour restreindre les week-ends par NOT IN ('Saturday', 'Sunday') .

De plus, nous devrons augmenter la plage du générateur de nombres jusqu'à 10 . Parce qu'il est possible que nous rencontrions 2 week-ends (4 jours au total) de part et d'autre de 5 jours de semaine.

Donc, nous avons besoin de 2 (première paire de jours de week-end) + 5 (jours de semaine) + 2 (deuxième paire de jours de week-end) + 1 (6ème jour de semaine) =10 dates à considérer. Un exemple de ce cas limite serait lorsqu'une date d'entrée est le dimanche.

Nous devrons utiliser LIMIT 6 pour restreindre le résultat jusqu'à 6 jours seulement, dans les cas non extrêmes.

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);

Requête

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;

Résultat

| VAR        |
| ---------- |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |
| 2018-11-15 |
| 2018-11-14 |

Voir sur DB Fiddle

Edge Case Demo – Date d'entrée :25 novembre 2018 (dimanche)

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);

Requête n° 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;

Résultat

| VAR        |
| ---------- |
| 2018-11-23 |
| 2018-11-22 |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |

Voir sur DB Fiddle