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

Tổng Chênh lệch Ngày Nhiều Hàng Mysql

Đối với mỗi hàng, hãy tìm hàng đầu tiên có Ngày đăng nhập cao hơn (sau này). Nếu tốc độ trong hàng này nhỏ hơn 10, hãy đếm chênh lệch ngày giữa ngày của hàng này và ngày của hàng tiếp theo, nếu không thì đặt 0.

Truy vấn cung cấp danh sách các giá trị được tính theo cách này sẽ trông giống như sau:

SELECT ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate
           LIMIT 1
       ) AS seconds_below_10
FROM car_log c1

Bây giờ vấn đề chỉ là tổng hợp lại:

SELECT sum( seconds_below_10) FROM 
( SELECT ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate
           LIMIT 1
          ) AS seconds_below_10
  FROM car_log c1 ) seconds_between_logs

Cập nhật sau khi nhận xét về việc thêm CarId:

Khi bạn có nhiều hơn 1 ô tô, bạn cần thêm một điều kiện WHERE nữa bên trong truy vấn phụ phụ thuộc (chúng tôi muốn nhật ký tiếp theo cho chính xác ô tô đó, không chỉ bất kỳ nhật ký tiếp theo nào) và nhóm toàn bộ hàng theo CarId, có thể thêm CarId đã nói vào lựa chọn để hiển thị nó cũng vậy.

SELECT sbl.carId, sum( sbl.seconds_below_10 ) as `seconds_with_speed_less_than_10` FROM
( SELECT c1.carId, 
         ( SELECT IF( c1.speed <10, unix_timestamp( c2.LogDate ) - unix_timestamp( c1.logdate ) , 0 )
           FROM car_log c2
           WHERE c2.LogDate > c1.LogDate AND c2.carId = c1.carId
           LIMIT 1 ) AS seconds_below_10
  FROM car_log c1 ) sbl
GROUP BY sbl.carId

Xem ví dụ tại Sqlfiddle .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:chọn khoảng thời gian 5 phút đầy đủ cuối cùng

  2. PHP Chuyển đổi mysql sang mysqli

  3. Tạo một bảng SQL nội tuyến ngay lập tức (đối với một phép nối không bao gồm bên trái)

  4. Chuyển đổi giây thành khoảng thời gian có thể đọc được của con người

  5. thao tác xóa mysql