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

Dotaz MySQL pro počítání položek po týdnech za aktuálních 52 týdnů?

Někomu se tento přístup nelíbí, ale já mám tendenci používat fiktivní tabulku, která obsahuje hodnoty od 0 do 1000, a pak použít odvozenou tabulku k vytvoření potřebných rozsahů -

CREATE TABLE dummy (`num` INT NOT NULL);
INSERT INTO dummy VALUES (0), (1), (2), (3), (4), (5), .... (999), (1000);

Pokud máte tabulku s automaticky se zvyšujícím ID a spoustou řádků, můžete ji z toho vygenerovat -

CREATE TABLE `dummy`
SELECT id AS `num` FROM `some_table` WHERE `id` <= 1000;

Nezapomeňte vložit hodnotu 0.

SELECT CURRENT_DATE - INTERVAL num DAY
FROM dummy
WHERE num < 365

Takže použitím tohoto přístupu na svůj dotaz můžete udělat něco takového -

SELECT WEEK(calendar.datefield) AS `week`, IFNULL(SUM(purchaseyesno),0) AS item_sales
FROM items_purchased join items on items_purchased.item_id=items.item_id 
RIGHT JOIN (
    SELECT (CURRENT_DATE - INTERVAL num DAY) AS datefield
    FROM dummy
    WHERE num < 365
) AS calendar ON (DATE(items_purchased.purchase_date) = calendar.datefield)
WHERE calendar.datefield >= (CURRENT_DATE - INTERVAL 1 YEAR)
GROUP BY week(datefield) -- shouldn't this be datefield instead of date?


  1. Soubor vs databáze pro efektivitu úložiště v chatovací aplikaci

  2. Vytvářejte fyzické zálohy databází MariaDB nebo MySQL

  3. SQL Server:Jak vybrat všechny dny v rozsahu dat, i když pro některé dny neexistují žádná data

  4. Rozdělení miliardové tabulky fotbalových dat pomocí kontextu dat