Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn MySQL để đếm các mục theo tuần trong 52 tuần hiện tại?

Một số người không thích cách tiếp cận này nhưng tôi có xu hướng sử dụng bảng giả chứa các giá trị từ 0 - 1000 và sau đó sử dụng bảng dẫn xuất để tạo ra các phạm vi cần thiết -

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

Nếu bạn có một bảng có id tăng tự động và nhiều hàng, bạn có thể tạo bảng từ đó -

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

Chỉ cần nhớ chèn giá trị 0.

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

Vì vậy, áp dụng cách tiếp cận này cho truy vấn của bạn, bạn có thể làm điều gì đó như thế này -

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 giống như một lĩnh vực khác

  2. Sử dụng truy vấn MySQL với các biến từ C #

  3. thu hút người theo dõi trên twitter như sử dụng MySQL

  4. MySqlCommand Chuẩn bị () không bao giờ đặt IsPrepared thành true

  5. trả về các số từ giữa một chuỗi với định dạng không đều