我的表格中的相关栏目(一般用于提问)是:
occurred timestamp with time zone and
name character varying(250)
为了问题,表名只是table
occurred
个时间戳将在一天内的午夜到午夜(独家)范围内。到目前为止,我的查询看起来像:
'SELECT COUNT(DISTINCT ON (name)) FROM table'
如果我可以将输出格式化为24个整数的列表(一天中每小时一个),那将是很好的,不需要返回名称。
答案 0 :(得分:2)
SELECT date_trunc('hour', occurred) AS hour_slice
,count(DISTINCT name) AS name_ct
FROM mytable
GROUP BY 1
ORDER BY 1;
DISTINCT ON
是一个不同的功能。
date_trunc()
为您提供每个不同时段的总和,而EXTRACT
在较长时间内每小时的总和。两个结果不会加起来,因为总计多个count(DISTINCT x)
等于或更高而不是一个count(DISTINCT x)
。
答案 1 :(得分:2)
如果我理解你想要什么,你可以写:
SELECT EXTRACT(HOUR FROM occurred),
COUNT(DISTINCT name)
FROM ...
WHERE ...
GROUP
BY EXTRACT(HOUR FROM occurred)
ORDER
BY EXTRACT(HOUR FROM occurred)
;
答案 2 :(得分:1)
你想要这个小时:
select extract(hour from occurred) as hr, count(distinct name)
from table t
group by extract(hour from occurred)
order by 1
这假设只有一天的数据。否则,将结合不同日期的小时数。要解决这个问题,您还需要包含日期信息。