2012-04-11 48 views
4

我有一個包含日期時間列和其他一些其他列的表。日期時間列表示正在發生的事件。它可以包含一個時間(當時發生的事件)或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 timestamp,ty – dtech 2012-04-13 10:17:34

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可能返回一個字符串)

然後按一刻鐘。

對不起,我沒有確切的語法你,但這種方法應該使您能夠獲得功能分組,之後可以按摩輸出,使它看起來要如何。