sql >> Database teknologi >  >> RDS >> Mysql

MySQL-forespørgsel til at tælle varer efter uge i de nuværende 52 uger?

Nogle mennesker kan ikke lide denne tilgang, men jeg har en tendens til at bruge en dummy-tabel, der indeholder værdier fra 0 - 1000 og derefter bruge en afledt tabel til at producere de intervaller, der er nødvendige -

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

Hvis du har en tabel med et auto-inkrementerende id og masser af rækker, kan du generere den ud fra det -

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

Bare husk at indsætte 0-værdien.

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

Så ved at anvende denne tilgang til din forespørgsel kunne du gøre noget som dette -

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. MySql får summen af ​​en kolonne i hver række i en ny kolonne

  2. Nulstille en kumulativ sum?

  3. MySQL COUNT() på tværs af flere kolonner

  4. MySQL:Vælg alle datoer mellem datointerval og få tabeldata, der matcher datoer