sql >> Database teknologi >  >> RDS >> Mysql

Throwback i datoer uden weekender

Vi kan bruge DayName() funktion for at få navnet på ugedagen svarende til en dato. Vi vil bruge denne funktions resultat til at begrænse weekender med NOT IN ('Saturday', 'Sunday') .

Vi bliver også nødt til at øge nummergeneratorområdet op til 10 . For der er mulighed for, at vi kan støde på 2 weekender (i alt 4 dage) på hver side af 5 hverdage.

Så vi har brug for 2 (første par weekenddage) + 5 (hverdage) + 2 (andet par weekenddage) + 1 (6. hverdag) =10 datoer at overveje. Et eksempel på dette kanttilfælde ville være, når en inputdato er søndag.

Vi bliver nødt til at bruge LIMIT 6 for kun at begrænse resultatet i op til 6 dage i tilfælde uden kant.

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

Forespørgsel

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;
 

Resultat

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

Se på DB Fiddle

Edge Case Demo – Inputdato:25. november 2018 (søndag)

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

Forespørgsel #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;
 

Resultat

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

Se på DB Fiddle




  1. MySql randomiser de sidste 10 rækker

  2. Sådan forespørges sql med aktiv registrering for datoer mellem specificerede tidspunkter

  3. SQL Server XML-forespørgsel med flere navnerum

  4. Hvad er standardbegrænsning i SQL Server - SQL Server / TSQL vejledning del 90