sql >> Database >  >> RDS >> Mysql

Throwback in dates zonder weekends

We kunnen gebruik maken van DayName() functie om de naam van de weekdag te krijgen die overeenkomt met een datum. We zullen het resultaat van deze functie gebruiken om weekenden te beperken tot NOT IN ('Saturday', 'Sunday') .

We moeten ook het bereik van de nummergenerator vergroten tot 10 . Omdat er een mogelijkheid is dat we 2 weekenden (totaal 4 dagen) aan weerszijden van 5 weekdagen kunnen tegenkomen.

We hebben dus 2 (eerste paar weekenddagen) + 5 (weekdagen) + 2 (tweede paar weekenddagen) + 1 (6e weekdag) =10 data nodig om te overwegen. Een voorbeeld van dit randgeval zou zijn wanneer een invoerdatum zondag is.

We moeten LIMIT 6 . gebruiken om het resultaat te beperken tot slechts 6 dagen, in de gevallen zonder rand.

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

Zoekopdracht

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;

Resultaat

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

Bekijken op DB Fiddle

Edge Case Demo - Invoerdatum:25 nov 2018 (zondag)

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

Vraag #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;

Resultaat

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

Bekijken op DB Fiddle




  1. SQL-sleutels, MUL versus PRI versus UNI

  2. CakePHP-query dichtstbijzijnde breedtegraad lengte uit database

  3. Het is mogelijk om gegevens in twee verschillende tabellen in mysql in te voegen met één invoegquery php?

  4. Coalesce gebruiken in MySQL