sqlite-запрос для сгруппированного таймфрейма - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь запросить таблицу истории подключений в почасовом интервале, каждый час - продолжительность соединения.

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 секунд, и прекратилось через 10 секунд после превращения в час 3.

Это означает, что запрос должен возвращать что-то вроде часа 1 =>35, час 2 => 10, час 3 => 10. Более того, если соединение все еще установлено (окончено = 0), я хочу, чтобы текущий час содержал данные для начала «сейчас», которые будут накапливаться в относительнойhour.

Присоединение к двум запросам sqlite не будет отвечать последней спецификации, так как всегда будет возвращать «сейчас» - «начато», даже если продолжительность сеанса превышает 1 час.

1 Ответ

4 голосов
/ 01 ноября 2012
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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...