sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fråga för att räkna objekt per vecka under de nuvarande 52 veckorna?

Vissa människor ogillar detta tillvägagångssätt, men jag brukar använda en dummy-tabell som innehåller värden från 0 - 1000 och sedan använda en härledd tabell för att producera de intervall som behövs -

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

Om du har en tabell med ett auto-inkrementerande ID och många rader kan du generera den från det -

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

Kom bara ihåg att infoga värdet 0.

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

Så, genom att tillämpa detta tillvägagångssätt på din fråga kan du göra något sånt här -

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. Hur man beviljar åtkomst till v$-visningar (v$session ,v$instance)

  2. Hur beräknar jag en löpande summa i SQL utan att använda en markör?

  3. När en Flask-applikation med Flask-SQLAlchemy körs, hur använder jag MySQL-klienten på samma databas samtidigt?

  4. Dummies guide till att låsa in innodb