2016-05-25 4 views
1

私は以下の表を持っている:テーブル内のDATETIMEの差の合計を求めますか?

--------------------------------- 
| id | class_id | time | status | 
--------------------------------- 
| 1 | 1  | <> | 1  | 
--------------------------------- 
| 2 | 2  | <> | 1  | 
--------------------------------- 
| 3 | 1  | <> | 0  | 
--------------------------------- 
| 4 | 2  | <> | 0  | 
--------------------------------- 

私は最初の行はclass_id = 1status = 1を持っていることがわかりますクエリをしたいです。次に、class_id = 1status = 0の次の行を探して、timeDATETIMEの場合は、timeの差が見つかります。

これの最後に、すべての時間差の合計(つまり、(row 1 - row 3) + (row2 - row4))が返されます。

これはどのように可能ですか?一般化では、問題は条件に基づいて表の行間の差の総計を得ることです。

+0

'class_id'には2つ以上のrecorsdがあります:1つは' status = 0'、もう1つは 'status = 1'ですか? – marlan

+0

@marlanいいえ、 'status = 0'、' status = 1'、 'status = 0'、' status = 1'のようになります。必ずしもテーブル内では連続しているわけではありません。 – think123

+0

まず - 何によるか? – jarlh

答えて

1

すべてのステータス0レコードについて、最新のステータス1レコードを検索します。これは、以前のすべてのステータス1レコードが最新のものであるからです。

select 
    class_id, 
    sum 
    (
    timestampdiff 
    (
     second, 
     (
     select s1.time 
     from mytable s1 
     where s1.status = 1 
     and s1.class_id = s0.class_id 
     and s1.id < s0.id 
     order by s1.id desc limit 1 
    ), 
     s0.time 
    ) 
) as diffsecs 
from mytable s0 
where status = 0 
group by class_id; 
+0

本当にありがとうございました:) – think123

関連する問題