Pembaruan 1:Ini biola, http://sqlfiddle.com/#!2/818ad /2
, yang saya gunakan untuk pengujian.
Pembaruan 2:Ini adalah biola, http://sqlfiddle.com/#!2/3f78d/10
yang saya gunakan untuk penyempurnaan/perbaikan lebih lanjut, berdasarkan komentar Sandy.
Pembaruan 3:Untuk beberapa alasan kasus di mana tidak ada hari sebelumnya tidak ditangani dengan benar. Saya pikir itu. Namun, saya telah memperbarui untuk memastikan itu berfungsi (agak rumit--tetapi tampaknya benar. Biola terakhir:http://sqlfiddle.com/#!2/3f78d/45
Saya pikir @Grijesh secara konseptual memberi Anda hal utama yang Anda butuhkan melalui self-join dari data input (jadi pastikan Anda memilih jawabannya!). Saya telah membersihkan kuerinya sedikit pada sintaks (membangun dari kuerinya!):
SELECT
DATE(t1.`Production_date`) as theDate,
MAX( t1.`bundle_count` ) AS 'max(bundle_count)',
MAX( t1.`bundle_count` ) -
IF(
EXISTS
(
SELECT date(t2.production_date)
FROM input_example t2
WHERE t2.machine_no = 1 AND
date_sub(date(t1.production_date), interval 1 day) = date(t2.production_date)
),
(
SELECT MAX(t3.bundle_count)
FROM input_example t3
WHERE t3.machine_no = 1 AND
date_sub(date(t1.production_date), interval 1 day) = date(t3.production_date)
GROUP BY DATE(t3.production_date)
), 0
)
AS Total_Bundles_Used
FROM `input_example` t1
WHERE t1.machine_no = 1
GROUP BY DATE( t1.`production_date` )
Catatan 1:Saya pikir @Grijesh dan saya sedang membersihkan masalah sintaks kueri secara bersamaan. Sangat menggembirakan bahwa kami berakhir dengan versi yang sangat mirip setelah kami berdua melakukan pembersihan. Versi saya berbeda dalam menggunakan IFNULL()
karena tidak ada data sebelumnya. Saya juga berakhir dengan DATE_SUB
, dan saya memastikan untuk mengurangi berbagai tanggal menjadi tanggal belaka tanpa komponen waktu, melalui DATE()
Catatan 2:Saya awalnya tidak sepenuhnya memahami tabel sumber Anda, jadi saya pikir saya perlu menerapkan penghitungan berjalan dalam kueri. Namun setelah diperiksa dengan lebih baik, jelas bahwa data sumber Anda sudah berjalan, jadi saya mengeluarkannya kembali.