你如何按小时分组查询?

时间:2015-02-28 03:36:41

标签: postgresql

我试图查询某一天内每小时完成的调查。 调查表是这样的:

id (SERIAL) - 用户ID (INTEGER) - 说明 - timeTaken (带时区的时间戳)

3 ;   1;   "some random description";  "2015-01-17 04:30:24.983576-05"
5 ;   2;   "sample about x";  "2015-01-17 04:30:24.983576-05"
7 ;   3;   "survey about ducks";  "2015-01-17 05:30:24.983576-05"

基本上对于给定的一天,比如3月1日,我希望得到所有调查行按照他们拍摄的时间分组,即下午1点的7行,下午2点的3行,等等。但我不确定是否它可以在pg上这样分组,或者我应该在客户端做到这一点。

上面数据的

编辑:将id 3和5分组在4以下,id 7分组为5.基本上我想显示按完成时间分隔的数据。 感谢

2 个答案:

答案 0 :(得分:1)

您可以使用date_part仅提取小时,您可以在group by子句中使用该小时。请参阅http://www.postgresql.org/docs/9.4/static/functions-datetime.html

答案 1 :(得分:0)

在postgresql中使用extarct函数

以下示例数据

id userid descp                   timetaken                   
-- ------ ----------------------- --------------------------- 
1  1      some random description 2015-01-17 15:00:24.9835760 
2  2      sample about x          2015-01-17 15:00:24.9835760 
3  3      survey about ducks      2015-01-17 16:00:24.9835760 
4  3      survey about ducks      2015-01-01 19:00:24.9835760 
5  3      survey about ducks      2015-01-01 16:00:24.9835760 
6  3      survey about ducks      2015-01-01 19:00:24.9835760

我需要按日期01-01-2015

获取每小时的survey_count
   select extract(hour  from timetaken)  survey_hour
          ,count(*) survey_count
   from sur
   where timetaken::date  ='2015-01-01'
   group by survey_hour