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

Tăng hiệu suất truy vấn MySQL - Truy vấn nặng về toán học

Tôi nghĩ điều này sẽ mang lại cho bạn những gì bạn muốn với phạm vi ngày luân phiên mà bạn lo lắng ... Tôi đã thử nghiệm bằng cách tạo bảng "hóa đơn" của riêng mình với hai cột được xác định. Nó thực sự khá đơn giản với việc sử dụng các biến @ mySQL có thể được sử dụng nội tuyến trong truy vấn ... Điều duy nhất là, bây giờ có một cách thực sự để biết số dư "mở" là gì, vì vậy tôi đã đặt giá trị ban đầu giá trị khởi động bằng 0 rồi điều chỉnh từ đó.

Kicker là truy vấn "PreAgg" để chỉ tổng hợp theo ngày vào / ra. Sau đó, bằng cách sắp xếp kết quả đó theo thứ tự ngày, biến @ sql bắt đầu hoạt động.

select
      PreAgg.PostDate,
      @PrevBal as BegBal,
      PreAgg.OutFlows,
      PreAgg.InFlows,
      @PrevBal := @PrevBal + PreAgg.OutFlows + PreAgg.InFlows as EndBal
   from 
      ( select
              i.postdate,
              sum( if( i.amount < 0, i.amount, 0 ) ) as OutFlows,
              sum( if( i.amount > 0, i.amount, 0 ) ) as InFlows
           from 
              invoice i
           where
              i.postdate between date_sub( now(), interval 2 month )
                             and date_add( now(), interval 1 month )
           group by
              i.postdate
           order by 
              i.postdate ) as PreAgg,
      ( select @PrevBal := 0.00 ) as SqlVars

Tuy nhiên, mặc dù tôi đã đưa ra thời hạn 3 tháng (-2 tháng, +1 tháng), tôi không nghĩ rằng điều đó thực sự có ý nghĩa vì các bài đăng trong tương lai sẽ chưa xảy ra ... điều quan trọng hơn là chỉ có

       where
          i.postdate > date_sub( now(), interval 3 month )

sẽ có được 3 tháng qua kể từ ngày / giờ hiện tạ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. Làm cách nào để khởi tạo cơ sở dữ liệu MySQL với lược đồ trong vùng chứa Docker?

  2. SQL CHỌN LIKE (cách viết hoa không nhạy cảm)

  3. Lexing SQL từng phần trong C #

  4. MySQL REPLACE () - Thay thế tất cả các phiên bản của một chuỗi con bằng một chuỗi khác

  5. Rails 5 Mysql UUID