Những gì tôi muốn nhận được là một số liệu thống kê với mỗi tháng từ một generate_series và tổng của số đếm trong mỗi tháng. SQL này hoạt động trong PostgreSQL 9.1:Tham gia truy vấn đếm trên một generate_series trong postgres và cũng lấy Null-giá trị là "0"
SELECT (to_char(serie,'yyyy-mm')) AS year, sum(amount)::int AS eintraege FROM (
SELECT
COUNT(mytable.id) as amount,
generate_series::date as serie
FROM mytable
RIGHT JOIN generate_series(
(SELECT min(date_from) FROM mytable)::date,
(SELECT max(date_from) FROM mytable)::date,
interval '1 day') ON generate_series = date(date_from)
WHERE version = 1
GROUP BY generate_series
) AS foo
GROUP BY Year
ORDER BY Year ASC;
Và đây là kết quả của tôi
"2006-12" | 4
"2007-02" | 1
"2007-03" | 1
Nhưng những gì tôi muốn nhận được là sản lượng này ("0" giá trị trong tháng Giêng):
"2006-12" | 4
"2007-01" | 0
"2007-02" | 1
"2007-03" | 1
Vì vậy, nếu có một tháng không có id nó nên được liệt kê tuy nhiên. Bất kỳ ý tưởng nào để giải quyết vấn đề này?
Dưới đây là một số dữ liệu mẫu:
drop table if exists mytable;
create table mytable(id bigint, version smallint, date_from timestamp without time zone);
insert into mytable(id, version, date_from) values
('4084036', '1', '2006-12-22 22:46:35'),
('4084938', '1', '2006-12-23 16:19:13'),
('4084938', '2', '2006-12-23 16:20:23'),
('4084939', '1', '2006-12-23 16:29:14'),
('4084954', '1', '2006-12-23 16:28:28'),
('4250653', '1', '2007-02-12 21:58:53'),
('4250657', '1', '2007-03-12 21:58:53')
;
Như mọi khi, định nghĩa bảng 'mytable' phải nằm trong câu hỏi của bạn. Và một số giá trị ví dụ để đi với nó sẽ sưng lên. –