Jak VYBRAT posledních 30 dní, záznamy z SQL, včetně dní s nulou?

0

Otázka

Chci VYBRAT z mého stolu posledních 30 denní záznamy. Můj dotaz vypadá takto:

SELECT DATE(o_date) as date, count(id) AS sum FROM customers WHERE o_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND NOW() GROUP BY o_date

Nebo toto:

SELECT DATE(o_date) AS date, COUNT(id) AS sum FROM customers WHERE o_date >= DATE(NOW()) + INTERVAL -30 DAY GROUP BY DATE(o_date)

Chci vytvořit seznam s daty a počet id-s.

Ale tam, kde jsem dont mít žádné záznamy v přesný den, dotaz jen přeskočit to datum. Ale chci vložit tam nula.

Příklad:

id o_date
1 2021-11-23
2 2021-11-22
3 2021-11-20
4 2021-11-20
5 2021-11-19
6 2021-11-18
7 2021-11-18

Výsledek bude tento:

datum součet
2021-11-23 1
2021-11-22 1
2021-11-20 2
2021-11-19 1
2021-11-18 2

Ale tam, kde jsem dont mít záznamy, jako v tomto příkladu v 2021-11-21 jak mohu vložit na součet 0?

Děkuji!!!

AKTUALIZACE: Potřebuji tento dotaz pro MariaDB.

mariadb mysql sql
2021-11-23 12:19:51
4

Nejlepší odpověď

1

Pro MariaDB,

SELECT DATE(o_date) AS date, COUNT(id) AS sum FROM customers WHERE o_date BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();

Pro SQL,

SELECT DATE(o_date) AS date, COUNT(id) AS sum FROM customers WHERE DATEDIFF(day,o_date,GETDATE()) < 31

nebo

SELECT DATE(o_date) AS date, COUNT(id) AS sum FROM customers WHERE DATEDIFF(day,o_date,GETDATE()) between 0 and 30
2021-11-23 16:39:51

Právě jsem aktualizoval otázku. Potřebuji tento dotaz pro MariaDB, tak, že DATEDIFF trvá jen 2 dva argumenty. Zkoušel jsem tento dotaz: VYBERTE DATUM(o_date) JAKO datum, COUNT(id) JAKO součet OD zákazníků, KDE DATEDIFF(o_date,CURDATE()) mezi 0 a 30, Ale v tomto případě, výsledek je pouze jeden řádek s dnes-s datum.
viktor1230
0

Z toho, co jsem mohl shromáždit, by to mělo být :

SELECT * FROM customers WHERE o_date BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

Odkaz na skoro 10 let starý příspěvek: MySQL Dotazu - Záznamy mezi Dnes a Posledních 30 Dnů

2021-11-23 16:10:22
0

Zkuste tento dotaz:

VYBERTE DATUM(o_date) JAKO datum, COUNT(id) JAKO součet OD zákazníků, KDE o_date >= DATE_ADD(NOW(), INTERVAL -30. DEN)

2021-11-23 14:32:46

FUNKCE xxxx.DATEADD neexistuje :/
viktor1230

Omlouvám se, že to byl pro sql server. V mysql, to je DATE_ADD(NOW(), INTERVAL -30. DEN). Pak dotaz bude ZVOLTE DATUM(o_date) JAKO datum, COUNT(id) JAKO součet OD zákazníků, KDE o_date >= DATE_ADD(NOW(), INTERVAL -30. DEN). Jsem editovat komentář
Asad Hashmi
0

Vaše otázka se zdá být o tom, jak zobrazit všech 30 dny, i dny s nulovou hodnotou.

Protože používáte MariaDB 10.0 nebo novější, tam je šikovný trik, jak dát všechny dny v rozmezí:

MariaDB [test]> SELECT '2019-01-01' + INTERVAL seq-1 DAY  AS dates   FROM seq_1_to_31;
+-----------------------------------+
| dates                             |
+-----------------------------------+
| 2019-01-01                        |
| 2019-01-02                        |
| 2019-01-03                        |
| 2019-01-04                        |
| 2019-01-05                        |
| 2019-01-06                        |  etc.

Takže, co děláte, je

SELECT ...
    FROM ( select using seq table ) AS dates
    JOIN ( your table ) AS yours ON dates.dy = yours.o_date
    WHERE ...

Sekundární otázku o tom, jak požádat o datum rozsah-obě vaše pokusy dát stejný výsledek se stejným výkonem.

2021-11-23 12:30:04

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................