2012-03-24 129 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

这意味着查询需要返回类似小时1 => 35后停止10秒,小时2 => 10,小时3 => 10。 此外,如果连接仍处于结束状态(结束= 0),我想让当前小时保存“now”开始的数据,这会在相对小时内累积。

加入2个sqlite查询将不会回答最后一个规范,因为它总是会返回“now” - “started”,即使会话超过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')