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

Làm cách nào tôi có thể nhận được sự khác biệt giữa các giá trị tối đa riêng lẻ của các ngày khác nhau?

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 đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về ADDTIME () - MySQL

  2. Lỗi cú pháp SQL khi tạo một thủ tục được lưu trữ trong MySQL

  3. MySQL - đếm người dùng đang hoạt động / không hoạt động / bị cấm và chọn người dùng dựa trên trạng thái trong một truy vấn

  4. hiển thị tất cả các bản ghi từ một bảng và khớp các bản ghi từ một bảng khác

  5. Laravel:Làm thế nào để thêm mệnh đề where bằng cách sử dụng trình tạo truy vấn?