私は多くの行を持つテーブルを持っているので、このクエリを実行すると:
SELECT
date_trunc('hour', fecha) AS momento
,(extract(minute FROM fecha)::int / 5) AS min
,count(fecha) AS cuenta
FROM table1
WHERE fk_id_busqueda=$id_busqueda
GROUP BY 1, 2
ORDER BY 1, 2;
時間がかかります。私が考えている解決策の1つは、データを日付順に並べ替えて、前の行のモーメントがループのある実際のモーメントと同じになるたびに1つを合計できるpostgres関数を作成することです。そして、が異なる場合は、値をリセットして次の行に渡します。この関数はid_busqueda(int)を受け取るという考え方です。
出力は次のようになります。
2013-01-20 00:00:00 | 0 | 16
2013-01-20 00:00:00 | 1 | 30
2013-01-20 00:00:00 | 2 | 27
2013-01-20 00:00:00 | 3 | 30
2013-01-20 00:00:00 | 4 | 33
2013-01-20 00:00:00 | 5 | 21
2013-01-20 00:00:00 | 6 | 27
2013-01-20 00:00:00 | 7 | 27
2013-01-20 00:00:00 | 8 | 19
2013-01-20 00:00:00 | 9 | 13
2013-01-20 00:00:00 | 10 | 17
2013-01-20 00:00:00 | 11 | 24
2013-01-20 01:00:00 | 0 | 12
2013-01-20 01:00:00 | 1 | 15
2013-01-20 01:00:00 | 2 | 25
2013-01-20 01:00:00 | 3 | 19
2013-01-20 01:00:00 | 4 | 10
2013-01-20 01:00:00 | 5 | 12
2013-01-20 01:00:00 | 6 | 13