如何编写Postgresql查询以按小时查找用户的计数?如何按时间段(例如小时)选择每个用户的计数?
表:
date name
------------------- ----
2015-01-01 23:11:11 John
2015-02-02 23:22:22 John
2015-02-02 23:00:00 Mary
2015-02-02 23:59:59 Mary
2015-03-03 00:33:33 Mary
所需的输出:
hour | name | count
---------------------+---------+-------
2015-01-01 23:00:00 | John | 1
2015-02-02 23:00:00 | Mary | 2
2015-02-02 23:00:00 | John | 1
2015-03-03 00:00:00 | Mary | 1
我想这http://www.sqlfiddle.com/#!12/a50d4/2:
CREATE TABLE my_table (
date TIMESTAMP WITHOUT TIME ZONE,
name TEXT
);
INSERT INTO my_table (date, name) VALUES ('2015-01-01 23:11:11', 'John');
INSERT INTO my_table (date, name) VALUES ('2015-02-02 23:22:22', 'John');
INSERT INTO my_table (date, name) VALUES ('2015-02-02 23:00:00', 'Mary');
INSERT INTO my_table (date, name) VALUES ('2015-02-02 23:59:59', 'Mary');
INSERT INTO my_table (date, name) VALUES ('2015-03-03 00:33:33', 'Mary');
SELECT DISTINCT
date_trunc('hour', "date") AS hour,
name,
count(*) OVER (PARTITION BY date_trunc('hour', "date")) AS count
FROM my_table
ORDER BY hour, count;
,但它给了我:
hour | name | count |
---------------------|------|-------|
2015-01-01 23:00:00 | John | 1 |
2015-02-02 23:00:00 | Mary | 3 |
2015-02-02 23:00:00 | John | 3 |
2015-03-03 00:00:00 | Mary | 1 |
类似:
你只需要一个窗函数的*运行*计数(那么你还需要'ORDER BY'了'OVER'子句中,使其有意义)。对于每小时的普通计数,一个简单的聚合函数可以完成这项工作。 – 2015-04-03 23:35:29
请不要编辑我的答案,因为你做了两次,我回滚了两个。 – 2015-04-25 19:50:26