sql >> データベース >  >> RDS >> Mysql

時差を見つけるためのMySQLグループ行

    これがお役に立てば幸いです

    まず、データを使用してcar_historyテーブルを作成しました:

    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');
    

    次に、このクエリを実行しました

    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
    

    そして最後に、私はこの結果を得ました:

    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. エラー:塗りつぶし:SelectCommand.Connectionプロパティが初期化されていません。

    2. MySQL:テーブルにレコードが存在しない場合はレコードを挿入します

    3. 移行時に生のSQLを実行する

    4. mysql列の値を含むMulti_Curl