- N分間隔のダウンサンプリングすると、過去方向のタイムスタンプで丸め込まれる。
- したがって、5分間隔の取得なら5mで集計しておけば5分間隔の過去側の時刻に正規化できる。
- time > N や time < N には N が含まれる。
- 不等号は≧≦として扱う。
- きっかり両端の時刻のデータがあると含まれてしまうので、ダウンサンプリング済みのデータを扱う場合に考慮する。
テストデータ
- 00:00:00 と 00:30:00 に 0
- 00:00:10 から5分おきに1から徐々に増える
- うっかりJSTでやっちゃったので、クエリでは9時間引いているので注意
時刻 |
time |
v |
2015-01-01 00:00:00 JST |
1420038010000 |
0 |
2015-01-01 00:00:10 JST |
1420038010000 |
1 |
2015-01-01 00:05:10 JST |
1420038310000 |
2 |
2015-01-01 00:10:10 JST |
1420038610000 |
3 |
2015-01-01 00:15:10 JST |
1420038910000 |
4 |
2015-01-01 00:20:10 JST |
1420039210000 |
5 |
2015-01-01 00:25:10 JST |
1420039510000 |
6 |
2015-01-01 00:30:00 JST |
1420039800000 |
0 |
2015-01-01 00:30:10 JST |
1420039810000 |
7 |
2015-01-01 00:35:10 JST |
1420040110000 |
8 |
2015-01-01 00:40:10 JST |
1420040110000 |
9 |
検証
SELECT time,mean(v),min(v),max(v) FROM a where time > '2014-12-31 15:00:00.000' and time < '2014-12-31 15:30:00.00' group by time(5m);
時刻 |
time |
mean |
min |
max |
00:00:00 |
1420038000000 |
0.5 |
0 |
1 |
00:05:00 |
1420038300000 |
2 |
2 |
2 |
00:10:00 |
1420038600000 |
3 |
3 |
3 |
00:15:00 |
1420038900000 |
4 |
4 |
4 |
00:20:00 |
1420039200000 |
5 |
5 |
5 |
00:25:00 |
1420039500000 |
6 |
6 |
6 |
00:30:00 |
1420039800000 |
0 |
0 |
0 |
00:30:00として、00:30:00のポイントを含む集計値が含まれている。
SELECT time,mean(v),min(v),max(v) FROM a where time > '2014-12-31 15:00:00.000' and time < '2014-12-31 15:35:00.00' group by time(5m);
時刻 |
time |
mean |
min |
max |
00:00:00 |
1420038000000 |
0.5 |
0 |
1 |
00:05:00 |
1420038300000 |
2 |
2 |
2 |
00:10:00 |
1420038600000 |
3 |
3 |
3 |
00:15:00 |
1420038900000 |
4 |
4 |
4 |
00:20:00 |
1420039200000 |
5 |
5 |
5 |
00:25:00 |
1420039500000 |
6 |
6 |
6 |
00:30:00 |
1420039800000 |
3.5 |
0 |
7 |
SELECT time,mean(v),min(v),max(v) FROM a where time > '2014-12-31 15:00:00.000' and time < '2014-12-31 15:30:00.00' group by time(15m);
時刻 |
time |
mean |
min |
max |
00:00:00 |
1420038000000 |
1.5 |
0 |
3 |
00:15:00 |
1420038900000 |
5 |
4 |
6 |
00:30:00 |
1420039800000 |
0 |
0 |
0 |
SELECT time,mean(v),min(v),max(v) FROM a where time > '2014-12-31 15:00:00.000' and time < '2014-12-31 15:35:00.00' group by time(15m);
時刻 |
time |
mean |
min |
max |
00:00:00 |
1420038000000 |
1.5 |
0 |
3 |
00:15:00 |
1420038900000 |
5 |
4 |
6 |
00:30:00 |
1420039800000 |
3.5 |
0 |
7 |