Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Powrót do dat bez weekendów

Możemy wykorzystać DayName() funkcja, aby uzyskać nazwę dnia tygodnia odpowiadającą Dacie. Wykorzystamy wynik tej funkcji, aby ograniczyć weekendy przez NOT IN ('Saturday', 'Sunday') .

Ponadto będziemy musieli zwiększyć zakres generatora liczb do 10 . Ponieważ istnieje możliwość, że możemy natknąć się na 2 weekendy (w sumie 4 dni) po obu stronach 5 dni roboczych.

Tak więc potrzebujemy 2 (pierwsza para dni weekendowych) + 5 (dni powszednie) + 2 (druga para dni weekendowych) + 1 (6. dzień tygodnia) =10 dat do rozważenia. Przykładem tego skrajnego przypadku może być sytuacja, w której datą wejściową jest niedziela.

Będziemy musieli użyć LIMIT 6 aby ograniczyć wynik tylko do 6 dni, w przypadkach, które nie są skrajne.

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

Zapytanie

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;

Wynik

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

Zobacz na DB Fiddle

Prezentacja przypadku Edge — data wprowadzenia:25 listopada 2018 r. (niedziela)

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

Zapytanie nr 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;

Wynik

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

Zobacz na DB Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate Named Query - dołącz do 3 stołów

  2. MySQL COUNT() i nulls

  3. Jak przechowywać dane JSON w MySQL?

  4. Zaloguj QUERIES nie używające INDEX - MySQL

  5. Upuścić unikalny klucz wielokolumnowy bez upuszczania klucza obcego?