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

Nhóm MySQL các hàng để tìm chênh lệch thời gian

hy vọng điều này sẽ giúp bạn

Đầu tiên, tôi đã tạo bảng car_history với dữ liệu:

CREATE TABLE car_history (
  id int(11) NOT NULL AUTO_INCREMENT,
  car_id int(11) ,
  car_status varchar(45),
  comments varchar(45),
  entry_date datetime ,
  PRIMARY KEY (id)
) ;


INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (1, '1', 'to_load', 'preparing', '2013-06-12 08:00:00');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (2, '1', 'to_load', ' preparing goods', '2013-06-12 14:10:00');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (3, '1', 'to_load', ' loading goods', '2013-06-12 17:00:50');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (4, '1', 'loaded', ' finding driver', '2013-06-13 07:00:00');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (5, '1', 'loaded', ' ready to deliver', '2013-06-13 08:00:00');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (6, '1', 'on_road', ' delivering goods', '2013-06-13 09:00:00');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (7, '1', 'in_garage', ' goods delivered', '2013-06-13 15:00:00');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (8, '1', 'to_load', ' preparing', '2013-06-14 08:00:00');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (9, '1', 'to_load', ' preparing goods', '2013-06-14 14:10:00');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (10, '1', 'to_load', ' loading goods', '2013-06-14 16:00:50');
INSERT INTO car_history (id, car_id,car_status,comments,entry_date) VALUES (11, '1', 'loaded', ' finding driver', '2013-06-12 08:00:00');

sau đó, tôi đã thực hiện truy vấn này

select table1.id, table1.car_id, table1.entry_date startDate,
       table2.entry_date endDate, timediff(table2.entry_date , table1.entry_date) duration
 from 
       (select @i1:[email protected]+1 as rownum, temp.*  from (select @i1:=0 ) as temp_iterator,
       (SELECT ch1.id, ch1.car_id, ch1.entry_date FROM car_history ch1 left outer join  car_history ch2 on ch1.id = ch2.id +1 
               left outer join  car_history ch3 on ch1.id = ch3.id -1
               where ch1.car_status = 'to_load' and 
              (ch1.car_status <> ch2.car_status or ch2.car_status is null
               or ch1.car_status <> ch3.car_status or ch3.car_status is null)
               order by ch1.id
        ) as temp) Table1 ,
       (select @i2:[email protected]+1 as rownum, temp.* from (select @i2:=0 ) as temp_iterator,
       (SELECT ch1.id, ch1.car_id, ch1.entry_date FROM car_history ch1 left outer join  car_history ch2 on ch1.id = ch2.id +1 
               left outer join  car_history ch3 on ch1.id = ch3.id -1
               where ch1.car_status = 'to_load' and 
              (ch1.car_status <> ch2.car_status or ch2.car_status is null
               or ch1.car_status <> ch3.car_status or ch3.car_status is null)
               order by ch1.id
        ) as temp) Table2
where table1.rownum = table2.rownum-1
and mod(table1.rownum,2) = 1

và cuối cùng, tôi có kết quả này:

id  | car_id    | startDate             | endDate               | duration
1   | 1         | 2013-06-12 08:00:00   | 2013-06-12 17:00:50   | 09:00:50
8   | 1         | 2013-06-14 08:00:00   | 2013-06-14 16:00:50   | 08:00:50



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật và xóa các Mô hình có Liên quan (Bảng quan hệ) trong Yii

  2. PDO lấy ID cuối cùng được chèn

  3. Ví dụ về TIMESTAMP () - MySQL

  4. Không thể lưu trữ tiếng Ả Rập trong cơ sở dữ liệu MYSQL bằng PHP

  5. Làm thế nào để có được bản ghi với giá trị tối đa trong MySQL