我有一个有很多行的表,所以当我进行这个查询时:
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;
这需要很多时间。我正在考虑的一个解决方案是创建一个 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