Cập nhật 1:Đây là một fiddle, http://sqlfiddle.com/#!2/818ad / 2
, mà tôi đã sử dụng để thử nghiệm.
Cập nhật 2:Đây là một fiddle, http://sqlfiddle.com/#!2/3f78d/10
mà tôi đã sử dụng để tinh chỉnh / sửa chữa thêm, dựa trên nhận xét của Sandy.
Cập nhật 3:Vì một số lý do mà trường hợp không có ngày trước đó đã không được xử lý chính xác. Tôi đã nghĩ rằng nó là. Tuy nhiên, tôi đã cập nhật để đảm bảo rằng nó hoạt động (hơi rườm rà - nhưng nó có vẻ đúng. Last fiddle:http://sqlfiddle.com/#!2/3f78d/45
Tôi nghĩ @Grijesh về mặt khái niệm đã giúp bạn có được điều chính mà bạn cần thông qua việc tự kết hợp dữ liệu đầu vào (vì vậy hãy đảm bảo rằng bạn bỏ phiếu cho câu trả lời của anh ấy!). Tôi đã xóa truy vấn của anh ấy một chút về cú pháp (dựa trên truy vấn của anh ấy!):
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` )
Lưu ý 1:Tôi nghĩ @Grijesh và tôi đã giải quyết các vấn đề cú pháp truy vấn cùng một lúc. Thật đáng khích lệ là chúng tôi đã kết thúc với các phiên bản rất giống nhau sau khi cả hai đều thực hiện dọn dẹp. Phiên bản của tôi khác khi sử dụng IFNULL()
cho khi không có dữ liệu trước đó. Tôi cũng đã kết thúc với một DATE_SUB
và tôi đã đảm bảo giảm các ngày khác nhau thành những ngày không có thành phần thời gian, thông qua DATE()
Lưu ý 2:Tôi ban đầu chưa hiểu đầy đủ về các bảng nguồn của bạn, vì vậy tôi nghĩ rằng tôi cần triển khai số lượng đang chạy trong truy vấn. Nhưng khi kiểm tra kỹ hơn, rõ ràng là dữ liệu nguồn của bạn đã có số lượng đang chạy, vì vậy tôi đã lấy lại nội dung đó.