Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta MySQL para contar itens por semana para as 52 semanas atuais?


Algumas pessoas não gostam dessa abordagem, mas costumo usar uma tabela fictícia que contém valores de 0 a 1000 e, em seguida, uso uma tabela derivada para produzir os intervalos necessários -
CREATE TABLE dummy (`num` INT NOT NULL);
INSERT INTO dummy VALUES (0), (1), (2), (3), (4), (5), .... (999), (1000);

Se você tiver uma tabela com um id de incremento automático e muitas linhas, poderá gerá-la a partir disso -
CREATE TABLE `dummy`
SELECT id AS `num` FROM `some_table` WHERE `id` <= 1000;

Apenas lembre-se de inserir o valor 0.
SELECT CURRENT_DATE - INTERVAL num DAY
FROM dummy
WHERE num < 365

Então, aplicando essa abordagem à sua consulta, você pode fazer algo assim -
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?