我正在尝试将我的连接历史记录表查询为每小时的时间范围,每小时都是连接时间。
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”。
答案 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')