2016-05-17 18 views
2

は、私はによると、前回の終了日と現在の事件の開始日差(分単位)を計算する必要がありますシステム行。MySQLの計算分

この表である:

id |system |start |end | ------------------------------------------------------------ 2 | system 1 | 2016-01-01 12:00:00 | 2016-01-01 13:00:00 | ------------------------------------------------------------ 3 | system 1 | 2016-01-02 11:00:00 | 2016-01-02 12:00:00 | ------------------------------------------------------------ 5 | system 1 | 2016-01-03 15:00:00 | 2016-01-03 16:00:00 | ------------------------------------------------------------ 6 | system 2 | 2016-01-01 10:00:00 | 2016-01-01 11:00:00 | ------------------------------------------------------------ 7 | system 2 | 2016-01-02 17:00:00 | 2016-01-02 18:00:00 |

これは結果である:

ID 2,6を有する2つのシステムレコードが減算を行うために「終了日」の事前のレコードを持っている:

id | system | diff_min | --------------------------------- 2 | system 1 | 0 | --------------------------------- 3 | system 1 | 1380 | --------------------------------- 5 | system 1 | 1620 | --------------------------------- 6 | system 2 | 0 | --------------------------------- 7 | system 2 | 1800 | ---------------------------------

+0

この結果が正しいの結果セットの最後の2つの列を無視してください ? '3 |システム1 | 1380 '。このようにはならないでしょうか?3 \t system 1 \t 1320'? – 1000111

+0

この例ではおおよその値です。 –

答えて

0

次のクエリは、この行います

SELECT 
    id, 
    system, 
    IF (@previousSystem = system, TIMESTAMPDIFF(MINUTE ,@previousEndTime,start), 
     @previousEndTime := 0) diff_min, 
    @previousSystem := system, 
    @previousEndTime := end 
FROM 
    system_table, 
    (
     SELECT 
      @previousSystem := NULL, 
      @previousEndTime := '0000-00-00 00:00:00' 
    ) var 
ORDER BY system, id; 

出力:

は、あなたが得るあなたの与えられたデータに上記のクエリを実行します出力は以下のようになります。

id system  diff_min 
2 system 1 0 
3 system 1 1320 
5 system 1 1620 
6 system 2 0 
7 system 2 1800 

SQL FIDDLE

私のクエリ

+0

親愛なる1000111、私はこの可能な解決策を試して、私は前の終了時間を持つシステムのdiff_min列にnull値を取得します。 –

+0

今すぐご確認ください。私は私の答えを編集し、また、フィドルを追加しました。 @GermánRojas – 1000111

+0

変更が有効でしたか? @GermánRojas – 1000111

0

次の2つの作り付けの機能

01を使用してこれを達成することができます
select id, system, TIMESTAMPDIFF(MINUTE, endDate, startDate) diff_min 

または

select id, system, TIMEDIFF(endDate, startDate)/60 as diff_min 
0
select id,system,TIMESTAMPDIFF(MINUTE,end,start) as diff_min from table_name;