sql >> Databáze >  >> RDS >> Mysql

Návrat k datům bez víkendů

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 |

Zobrazit na DB Fiddle

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 |

Zobrazit na DB Fiddle




  1. flake8 si stěžuje na booleovské srovnání ==ve filtrační klauzuli

  2. Jaká je maximální délka dat, která mohu vložit do sloupce BLOB v MySQL?

  3. Změňte chování Session.delete() SQLAlchemy

  4. Spočítat počet výskytů řetězce v poli VARCHAR?