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

Total berjalan selama rentang tanggal - isi tanggal yang hilang

Untuk memenuhi bulan yang hilang, buat tabel template untuk digabungkan.

Anggap saja sebagai caching. Daripada mengulang dan mengisi celah, cukup simpan kalender dalam cache di database Anda.

Anda bahkan dapat menggabungkan beberapa kalender (awal bulan, awal minggu, hari libur bank, hari kerja, dll) ke dalam satu tabel, dengan banyak tanda dan indeks pencarian.

Anda berakhir dengan sesuatu seperti...

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

EDIT

Saya baru menyadari bahwa OP menginginkan total berjalan.

Ini -mungkin- dalam SQL tetapi sangat tidak efisien. Pasalnya, hasil satu bulan tidak digunakan untuk menghitung bulan berikutnya. Sebagai gantinya, total running-total harus dihitung lagi.

Untuk alasan ini Biasanya sangat disarankan agar Anda menghitung total bulanan seperti di atas, kemudian menggunakan aplikasi Anda untuk melakukan iterasi dan membuat nilai total berjalan.

Jika Anda sangat harus melakukannya dalam SQL, itu akan menjadi seperti...

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. Bagaimana cara memilih pelanggan tertentu?

  2. MySQL:Apakah mungkin untuk 'mengisi' SELECT dengan nilai tanpa tabel?

  3. Berapa banyak angka penting yang harus saya simpan di database saya untuk koordinat GPS?

  4. Daftar tag SQL dan pemfilteran tag

  5. Dapatkan baris terakhir PER Grup