Группировать записи по времени

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

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

пример:

<code>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
</code>

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

<code>interval            | COUNT(id)
2012-01-01 00:00:00 | 2
2012-01-01 00:15:00 | 2
2012-01-01 00:30:00 | 1
</code>

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

Ответы на вопрос(2)

Решение Вопроса

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

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

 dtech13 апр. 2012 г., 12:17
Умное использование целочисленного округления + метка времени Unix, ты

ра), но я постараюсь набрать минуты, используя

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

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

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

cast(x as int)

Получение минимального значения числа в SQLite?

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

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

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

Затем группа по четверти часа.

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

Ваш ответ на вопрос