2013-06-19 74 views
8

Hy. Có hồ sơ nhân viên trong một cái gì đó cơ sở dữ liệu postgresql của tôi nhưNhóm theo ngày Postgresql Ngày giờ

CODE  DATE  COUNT 
"3443" "2009-04-02" 3 
"3444" "2009-04-06" 1 
"3443" "2009-04-06" 1 
"3443" "2009-04-07" 7 

Tôi muốn sử dụng một truy vấn "SELECT ALL MÃ SỐ VÀ đếm chúng đã xảy ra trong THÁNG"

KẾT QUẢ:

CODE  DATE  COUNT 
"3443" "2009-04" 3 
"3441" "2009-04" 13 
"3442" "2009-04" 11 
"3445" "2009-04" 72 

tôi đã sử dụng truy vấn tức là

SELECT CODE,date_part('month',DATE),count(CODE) 
FROM employee 
where 
group by CODE,DATE 

Truy vấn trên chạy tốt nhưng các tháng được liệt kê i n các hồ sơ ở dạng số và khó có thể thấy rằng một tháng thuộc về năm nào. Trong ngắn hạn tôi muốn có được kết quả giống như đề cập ở trên trong phần RESULT. Cảm ơn

Trả lời

17

Hãy thử điều này:

SELECT CODE, to_char(DATE, 'YYYY-MM'), count(CODE) 
FROM employee 
where 
group by CODE, to_char(DATE, 'YYYY-MM') 
1

Hãy thử bất kỳ

SELECT CODE,count(CODE), 
    DATE as date_normal, 
    date_part('year', DATE) as year, 
    date_part('month', DATE) as month, 
    to_timestamp(
     date_part('year', DATE)::text 
     || date_part('month', DATE)::text, 'YYYYMM') 
     as date_month 
FROM employee 
where 
group by CODE,DATE; 
12

Tùy thuộc vào việc bạn muốn kết quả dưới dạng văn bản hoặc một ngày, bạn cũng có thể viết nó như thế này:

SELECT CODE, date_trunc('month', DATE), COUNT(*) 
    FROM employee 
    GROUP BY CODE, date_trunc('month', DATE); 

Ví dụ nào trong ví dụ của bạn sẽ trả về điều này, với DATE vẫn là dấu thời gian, điều này có thể hữu ích nếu bạn định làm thêm tính toán trên đó vì không chuyển đổi là cần thiết:

CODE  DATE  COUNT 
"3443" "2009-04-01" 3 
"3441" "2009-04-01" 13 
"3442" "2009-04-01" 11 
"3445" "2009-04-01" 72 

date_trunc() cũng chấp nhận các giá trị khác, ví dụ quarter, year, vv Xem documentation cho tất cả các giá trị

Các vấn đề liên quan