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

Dữ liệu MySQL Count trong 7 ngày qua

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-01-02" 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 HH:MM:SS). Trong ví dụ này, tôi đã trừ giá trị NUMBERS.id vào CURRENT_DATE để nhận danh sách các giá trị ngày tuần tự cho tuần trước -

    SELECT x.dt
      FROM (SELECT DATE_SUB(CURRENT_DATE, INTERVAL (n.id - 1) DAY) AS dt
              FROM numbers n
             WHERE n.id <= 7 ) 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 x.dt,
               COUNT(v.aid) AS num
         FROM (SELECT DATE_SUB(CURRENT_DATE, INTERVAL (n.id - 1) DAY) AS dt
                 FROM numbers n
                WHERE n.id <= 7 ) x
    LEFT JOIN VOTES v ON DATE(FROM_UNIXTIME(v.timestamp)) = DATE(x.dt)
     GROUP BY x.dt
     ORDER BY x.dt
    

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

Đơn giản - ngày tháng 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.

Trước đây:

  SELECT DATE(FROM_UNIXTIME(v.timestamp)) AS dt,
         COUNT(v.aid)
    FROM VOTES v
   WHERE DATE(FROM_UNIXTIME(v.timestamp)) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
                                              AND CURRENT_DATE
GROUP BY DATE(FROM_UNIXTIME(v.timestamp))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để ghi lại các truy vấn thô trong MySQL?

  2. Các giao dịch đồng thời có thể gây nhiễu lẫn nhau không? php / mysql

  3. SQL để nhận bản ghi riêng biệt cho sự kết hợp của hai cột (Không phân biệt thứ tự)

  4. Bạn quản lý cơ sở dữ liệu trong quá trình phát triển, thử nghiệm và sản xuất như thế nào?

  5. Chọn Ngày và Giờ Sớm nhất từ ​​Danh sách Phiên của Người dùng Riêng biệt