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

Nhận số lượng hàng ngày cho các sự kiện không xảy ra hàng ngày

Bạn đang tìm cách để có được tất cả các ngày được liệt kê, ngay cả những ngày không được hiển thị trong customer của bạn bàn. Đây là một chứng đau cổ khét tiếng trong SQL. Đó là bởi vì ở dạng thuần túy, SQL thiếu khái niệm về một chuỗi liền kề của bất kỳ thứ gì ... số chính, ngày, bất cứ thứ gì.

Vì vậy, bạn cần giới thiệu một bảng có chứa nguồn các số hoặc ngày tháng hoặc thứ gì đó gần nhau, và sau đó TRÁI THAM GIA dữ liệu hiện có của bạn vào bảng đó.

Có một số cách để làm điều đó. Một là tạo cho mình một calendar bảng với một hàng cho mỗi ngày trong thập kỷ hoặc thế kỷ hiện tại hoặc bất cứ thứ gì, sau đó tham gia vào hàng đó. (Bảng đó sẽ không lớn lắm so với khả năng của một cơ sở dữ liệu hiện đại.

Giả sử bạn có bảng đó và nó có một cột có tên là date . Sau đó, bạn sẽ làm điều này.

 SELECT calendar.date AS created,
        ISNULL(a.customer_count, 0) AS customer_count
   FROM calendar
   LEFT JOIN ( 
            SELECT COUNT(*) AS customer_count,
                   DATE(created) AS created
              FROM customer
             GROUP BY DATE(created)
        ) a ON calendar.date = a.created
   WHERE calendar.date BETWEEN start AND finish 
   ORDER BY calendar.date

Lưu ý một số điều. Đầu tiên, LEFT JOIN từ bảng lịch sang tập dữ liệu của bạn. Nếu bạn sử dụng JOIN thông thường dữ liệu bị thiếu trong tập dữ liệu của bạn sẽ loại bỏ các hàng trong lịch.

Thứ hai, ISNULL trong toplevel SELECT để biến các giá trị bị thiếu, rỗng, từ tập dữ liệu của bạn thành các giá trị bằng không.

Bây giờ, bạn hỏi, tôi có thể lấy bảng lịch đó ở đâu? Tôi trân trọng đề nghị bạn tra cứu điều đó và hỏi một câu hỏi khác nếu bạn không thể tìm ra.

Tôi đã viết một bài luận nhỏ về vấn đề này, bạn có thể tìm thấy ở đây. http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn hàng có ngày gần đây nhất cho mỗi người dùng

  2. Thêm nút Xóa vào bảng kết quả PHP

  3. Bảng PHP (Ngày) thay đổi màu động dựa trên tính hợp lệ

  4. PDO Multi-query SQLSTATE [HY000]:Lỗi chung

  5. Định dạng ngày trong MySQL - khó chèn ngày