2012-03-24 10 views
1

私は接続履歴テーブルを毎時の時間枠に照会しようとしています。グループ化された時間枠のsqliteクエリ

create table sessionHistory (
    _id  integer PRIMARY KEY autoincrement, 
    modified integer, 
    ip  text, 
    ... 
    started integer, 
    ended  integer 
); 

すべての接続開始には「開始」日付があり、終了すると「終了」日付が両方ともUNIXエポックになります。

は、私は彼らが次のクエリを使用してグループすることができるよ:

select strftime('%H', started, 'unixepoch') HOUR_, 
     sum(ended-started) TOTAL_TIME_ 
from sessionHistory 
where ip='123.123.123.123' and ended!=0 
group by strftime('%H', started, 'unixepoch') 

は今、私は時間ごとに(= 0終了)まだ進行中のセッションの時間を含めることも望みます。

たとえば、時間1では、接続が開始され、35秒の時間で終了しました。時間2には、接続は時間3に変わる直前に開始され、回転に10秒、時間3に変わってから10秒で停止しました。

これは、質問が時間1 => 35、時間2 => 10、時間3 => 10. さらに接続がまだ終了していれば(終了= 0)、「今」開始のデータを保持する現在の時間を保持したいと考えています。これは相対時間で累積します。

2つのsqliteクエリを結合すると、セッションが1時間以上経過しても、常に「今すぐ」 - 「開始済み」が返されるため、最後の指定には応答しません。

答えて

4
select strftime('%H', started, 'unixepoch') HOUR_, 
     sum(ended-started)+ 
      (
      SELECT sum(now-started) 
      from sessionHistory 
      where ip='123.123.123.123' and ended=0 
      group by strftime('%H', started, 'unixepoch') 
      ) TOTAL_TIME_ 
from sessionHistory 
where ip='123.123.123.123' and ended!=0 
group by strftime('%H', started, 'unixepoch') 
関連する問題