2013-06-19 23 views
8

Hy. Istnieją zapisy pracowników w moim coś PostgreSQL jakGrupa według daty Postgresql

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

chcę użyć kwerendy „SELECT wszystkie kody i policzyć je, które wystąpiły w miesiąc”

WYNIK:

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

I nie używać kwerendy tj

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

Powyższa kwerenda działa poprawnie, ale miesiąc wymienione I n zapisy mają postać liczb i trudno jest stwierdzić, że miesiąc należy do danego roku. W skrócie chcę uzyskać wynik, tak jak wspomniano powyżej w sekcji WYNIK. Dzięki

Odpowiedz

17

Spróbuj tego:

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

Spróbuj dowolnego

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

zależności od tego czy chcesz wynik jako tekst lub daty, można również napisać to tak:

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

Który w twoim przykładzie zwróci to, z DATE nadal znacznikiem czasu, który może być przydatny, jeśli zamierzasz robić dalej Obliczenia na nim Ponieważ nie konwersje są niezbędne:

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() akceptuje także inne wartości, na przykład quarter, year itp Zobacz documentation dla wszystkich wartości