sql >> Databasteknik >  >> RDS >> Mysql

Throwback in datum utan helger

Vi kan använda DayName() funktion för att få namnet på den veckodag som motsvarar ett datum. Vi kommer att använda denna funktions resultat för att begränsa helger med NOT IN ('Saturday', 'Sunday') .

Vi kommer också att behöva öka nummergeneratorns intervall upp till 10 . För det finns en möjlighet att vi kan stöta på 2 helger (totalt 4 dagar) på vardera sidan av 5 vardagar.

Så vi behöver 2 (första paret helgdagar) + 5 (vardagar) + 2 (andra paret helgdagar) + 1 (6:e veckodagen) =10 datum att ta hänsyn till. Ett exempel på detta kantfall skulle vara när ett inmatningsdatum är söndag.

Vi kommer att behöva använda LIMIT 6 för att begränsa resultatet endast i upp till 6 dagar, i fall utan kant.

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

Fråga

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 |

Visa på DB Fiddle

Edge Case Demo – Inmatningsdatum: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);

Fråga #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 |

Visa på DB Fiddle




  1. SQL-serverprestandastatistik för att ligga steget före i spelet

  2. SQL Server Reguljära uttryck i T-SQL

  3. Lista alla sekvenser i en Postgres db 8.1 med SQL

  4. Det går inte att hämta ID:t för den senast infogade raden i Hibernate med Oracle