sql >> Database >  >> RDS >> Mysql

MySQL-query om items per week te tellen voor de huidige 52 weken?

Sommige mensen houden niet van deze aanpak, maar ik heb de neiging om een ​​dummy-tabel te gebruiken die waarden van 0 - 1000 bevat en vervolgens een afgeleide tabel te gebruiken om de bereiken te produceren die nodig zijn -

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

Als u een tabel heeft met een automatisch oplopende ID en veel rijen, kunt u deze daaruit genereren -

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

Vergeet niet om de 0-waarde in te voeren.

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

Dus als je deze benadering op je vraag toepast, zou je zoiets als dit kunnen doen -

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. json_encode retourneert de waarden van de volgende rijen - PHP PDO SQL HighCharts

  2. Hoe synchroniseer ik een bepaalde tabel met dezelfde naam en databasenaam tussen twee verschillende onafhankelijke netwerken waar replicatie niet mogelijk is?

  3. Laravel 5 Welsprekend:hoe krijg ik onbewerkte sql die wordt uitgevoerd? (met gebonden gegevens)

  4. Meet u de prestaties van SQL Server met deze statistieken?