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

Nhóm theo ngày, trả về hàng ngay cả khi không tìm thấy bản ghi

MySQL không có chức năng đệ quy, vì vậy bạn chỉ còn cách sử dụng thủ thuật bảng NUMBERS -

  1. Tạo một bảng chỉ chứa các số tăng dần - dễ thực hiện bằng cách sử dụng auto_increment:

    DROP TABLE IF EXISTS `example`.`numbers`;
    CREATE TABLE  `example`.`numbers` (
      `id` int(10) unsigned NOT NULL auto_increment,
       PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  2. Điền vào bảng bằng cách sử dụng:

    INSERT INTO NUMBERS
      (id)
    VALUES
      (NULL)
    

    ... cho bao nhiêu giá trị bạn cần.

  3. Sử dụng DATE_ADD để tạo danh sách ngày, tăng số ngày dựa trên giá trị NUMBERS.id. Thay thế "2010-01-01" và "2010-03-01" bằng ngày bắt đầu và ngày kết thúc tương ứng của bạn (nhưng sử dụng cùng một định dạng, YYYY-MM-DD) -

    SELECT x.*
      FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY)
              FROM numbers n
             WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x
    
  4. THAM GIA TRÁI vào bảng dữ liệu của bạn dựa trên phần ngày giờ:

       SELECT DATE(x.dt) AS dt,
              COALESCE(SUM(e.value), 0) AS sum_value
         FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY) AS dt
                 FROM numbers n
                WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x
    LEFT JOIN ENTRY e ON DATE(e.datetime) = x.dt
                     AND e.entryid = 85
     GROUP BY DATE(x.dt) 
    

Tại sao lại là Số, không phải Ngày?

Đơn giản - ngày có thể được tạo dựa trên số, như trong ví dụ tôi đã cung cấp. Nó cũng có nghĩa là sử dụng một bảng duy nhất, so với một bảng cho mỗi loại dữ liệu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tự động tạo đối tượng PHP dựa trên chuỗi

  2. nhận giá trị thập phân thô từ truy vấn mysqldb

  3. Xóa các hàng sql trong đó ID không khớp với bảng khác

  4. Sử dụng JQuery để chèn giá trị vào mySQL

  5. Nhiều câu lệnh chọn trong một truy vấn