Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Meningkatkan kinerja Kueri MySQL - Permintaan berat matematika

Saya pikir ini akan memberi Anda apa yang Anda inginkan dengan bagaimanapun rentang tanggal bergulir yang Anda khawatirkan ... Saya telah menguji dengan membuat tabel "faktur" saya sendiri dengan dua kolom yang diidentifikasi. Sebenarnya cukup sederhana dengan pemanfaatan variabel @ mySQL yang dapat digunakan sebaris dalam kueri... Satu-satunya hal adalah, sekarang ada cara yang benar untuk mengetahui apa itu saldo "pembuka", jadi saya telah menetapkan saldo awal nilai awal nol kemudian sesuaikan dari itu.

Kicker adalah kueri "PreAgg" yang hanya dikumpulkan berdasarkan tanggal masuk/keluar. Kemudian, dengan mengurutkan hasil tersebut dalam urutan tanggal, variabel @ sql akan aktif.

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

Namun, meskipun saya telah memberikan jendela 3 bulan (-2 bulan, +1 bulan), saya tidak berpikir itu benar-benar masuk akal karena posting di masa depan belum akan terjadi ... yang mungkin lebih penting adalah hanya memiliki

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

yang akan mendapatkan 3 bulan terakhir dari tanggal/waktu saat ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan baris yang paling cocok di MySQL (InnoDB)

  2. Jumlahkan hasil dari beberapa kueri lalu temukan 5 teratas di SQL

  3. Menggunakan ORDER BY dan GROUP BY bersama-sama

  4. Bisakah saya membuat WHERE col LIKE '%' pilih nilai NULL juga?

  5. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Kegagalan tautan komunikasi