2012-04-11 5 views
4

У меня есть таблица, содержащая столбец datetime и несколько других столбцов. Столбец datetime представляет событие. Он может либо содержать время (событие произошло в это время), либо NULL (событие не произошло)Групповые записи по времени

Теперь я хочу подсчитать количество записей, происходящих через определенные промежутки времени (15 минут), но не знаю, как сделай это.

пример:

id | time    | foreign_key 
1 | 2012-01-01 00:00:01 | 2 
2 | 2012-01-01 00:02:01 | 4 
3 | 2012-01-01 00:16:00 | 1 
4 | 2012-01-01 00:17:00 | 9 
5 | 2012-01-01 00:31:00 | 6 

Теперь я хочу, чтобы создать запрос, который создает результирующий набор похож на:

interval   | COUNT(id) 
2012-01-01 00:00:00 | 2 
2012-01-01 00:15:00 | 2 
2012-01-01 00:30:00 | 1 

Возможно ли это в SQL или может кто-нибудь посоветовать, какие другие инструменты, которые я мог бы использовать ? (Например, экспорт данных в программу электронных таблиц не будет проблемой)

ответ

8

Дайте этому попытку:

select datetime((strftime('%s', time)/900) * 900, 'unixepoch') interval, 
     count(*) cnt 
from t 
group by interval 
order by interval 

Проверьте скрипку here.

+2

Умное использование целочисленного округления + временная отметка unix, ty – dtech

1

Я ограничил SQLite фон (и нет экземпляра практики), но я хотел бы попробовать захватывая минут с помощью

strftime(FORMAT, TIMESTRING, MOD, MOD, ...) 

с %M модификатор (http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html)

Затем разделите на 15 и получить пол вашего частного, чтобы выяснить, какие четверть часа вы находитесь в (например, 0, 1, 2, или 3)

cast(x as int) 

Getting the floor value of a number in SQLite?

нанизанные это может выглядеть примерно так:

Select cast((strftime('YYYY-MM-DD HH:MI:SS', your_time_field, '%M')/15) as int) from your_table 

(возможно, придется бросить, прежде чем делить на 15, а также, так как strftime вероятно, возвращает строку)

Тогда группа по четверть часа.

Извините, у меня нет точного синтаксиса для вас, но этот подход позволит вам получить функциональные группы , после чего вы можете массировать вывод, чтобы он выглядел так, как вы хотите.

Смежные вопросы