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

SQL:Truy xuất tổng cộng dưới dạng chọn con rất chậm

Thay vì nhóm trên tất cả các trường đó, một giải pháp đơn giản hơn (và nhanh hơn) (từ tại đây ) có thể là:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Tôi không thể tưởng tượng rằng truy vấn của bạn trả về kết quả bạn muốn (nếu tôi hiểu đúng yêu cầu của bạn). Tôi hiểu yêu cầu của bạn là khi không có hàng nào trong một giờ nhất định, bạn muốn tính tổng của tất cả các hàng có giờ

Không có cách nào hiệu quả dễ dàng để thực hiện điều này trong MySQL mà tôi biết, tôi khuyên bạn nên tạo một bảng tạm thời với tất cả các giá trị nhóm có thể có trong phạm vi mà bạn đang xem xét (có thể là với một vòng lặp). Bạn có thể thiết lập bảng này trước trong vài năm và có thể thêm các hàng theo yêu cầu. Sau đó, bạn có thể rời khỏi tham gia bảng này và bảng của mình.

Nếu bạn đang sử dụng MSSQL, bạn có thể đã sử dụng CTE đệ quy, mặc dù điều này có thể rất chậm. Xem cái này hoặc google "mysql cte" cho các lựa chọn thay thế MySQL. Cách thực hiện điều này với đệ quy là (trái) tham gia lặp lại trên cùng một bảng trong HOUR = HOUR+1 cho đến khi bạn nhận được giá trị không phải NULL, sau đó dừng lại. Đối với mỗi cái này, bạn sẽ tính tổng ngược lại.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thiết lập MySQL InnoDB Cluster với MySQL Shell (cùng với MySQL Router)

  2. Cách nhập LARGE tệp sql vào bảng mysql

  3. Liên quan đến nhiều người và không có cái này

  4. Số lượng cột không khớp với số lượng giá trị ở hàng 1 Nhà cung cấp Lỗi:1136

  5. CakePHP 3 KHÔNG thể kết nối với cơ sở dữ liệu do thiếu phần mở rộng PHP