Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL заявка за броене на елементи по седмица за текущите 52 седмици?

Някои хора не харесват този подход, но аз съм склонен да използвам фиктивна таблица, която съдържа стойности от 0 - 1000 и след това да използвам производна таблица, за да произведа диапазоните, които са необходими -

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

Ако имате таблица с автоматично увеличаващ се идентификатор и много редове, можете да я генерирате от това -

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

Просто не забравяйте да въведете стойността 0.

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

Така че, прилагайки този подход към вашата заявка, можете да направите нещо подобно -

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL JOIN злоупотреба? Колко лошо може да стане?

  2. Импортиране на данни в MySQL от MS SQL

  3. MySQL група по ден с дата и час смесване на едни и същи дати от различни месеци

  4. По-добре ли е да ИЗБЕРЕТЕ, преди да се присъедините?

  5. Как да промените MySQL/MariaDB порт по подразбиране в Linux