sqlite查询分组的时间范围

时间:2012-03-24 09:55:13

标签: sql 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。 此外,如果连接仍然是up(结束= 0),我想让当前小时保持“now”-started的数据,这将在相对小时内累积。

加入2个sqlite查询将无法回答最后一个规范,因为即使会话超过1小时,它也将始终返回“now” - “started”。

1 个答案:

答案 0 :(得分: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')
相关问题