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

Chạy tổng cộng trong phạm vi ngày - điền vào những ngày còn thiếu

Để phục vụ cho những tháng còn thiếu, hãy tạo một bảng mẫu để kết hợp với nhau.

Hãy coi nó như bộ nhớ đệm. Thay vì lặp lại và lấp đầy khoảng trống, chỉ cần lưu một lịch vào bộ nhớ cache trong cơ sở dữ liệu của bạn.

Bạn thậm chí có thể kết hợp nhiều lịch (đầu tháng, đầu tuần, ngày nghỉ ngân hàng, ngày làm việc, v.v.) tất cả vào một bảng, với một loạt các cờ và chỉ mục tìm kiếm.

Bạn kết thúc với một cái gì đó giống như ...

SELECT
  calendar.date,
  SUM(data.amt)
FROM
  calendar
LEFT JOIN
  data
    ON  data.date >= calendar.date
    AND data.date <  calendar.date + INTERVAL 1 MONTH
WHERE
      calendar.date >= '20110101'
  AND calendar.date <  '20120101'
GROUP BY
  calendar.date

CHỈNH SỬA

Tôi chỉ nhận thấy rằng OP muốn một tổng số đang chạy.

Điều này-có thể xảy ra trong SQL nhưng nó là cực kỳ không hiệu quả. Lý do là kết quả của một tháng không được sử dụng để tính cho tháng tiếp theo. Thay vào đó, toàn bộ tổng số lần chạy phải được tính toán lại.

Vì lý do này, bạn nên tính tổng số tiền hàng tháng như trên, sau đó sử dụng ứng dụng của bạn để duyệt qua và tạo ra các giá trị tổng đang chạy.

Nếu bạn thực sự phải làm điều đó trong SQL, nó sẽ giống như ...

SELECT
  calendar.date,
  SUM(data.amt)
FROM
  calendar
LEFT JOIN
  data
    ON  data.date >= @yourFirstDate
    AND data.date <  calendar.date + INTERVAL 1 MONTH
WHERE
      calendar.date >= @yourFirstDate
  AND calendar.date <  @yourLastDate
GROUP BY
  calendar.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. Làm cách nào để tham chiếu bảng chính trong một phép nối nhiều bảng?

  2. Định dạng ngày và làm rõ Truy vấn SQL

  3. Thay đổi bộ ký tự mặc định của MySQL thành UTF-8 trong my.cnf?

  4. Sử dụng LIMIT trong GROUP BY để nhận N kết quả cho mỗi nhóm?

  5. Kiểm tra xem mysql_query có trả lại bất kỳ thứ gì hay không