Группировать по времени даты Postgresql

Hy. Есть записи сотрудников в моей базе данных postgresql что-то вроде

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

Я хочу использовать запрос "выберите все коды и подсчитайте их, которые произошли в месяце"

результат:

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

я использовал запрос, т. е.

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

вышеуказанный запрос работает нормально, но месяцы, перечисленные в записях, в виде чисел, и его трудно найти, что месяц принадлежит к какому году. Короче говоря, я хочу получить результат, Как упоминалось выше в разделе результатов. Спасибо

3 ответов


попробуйте это:

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

в зависимости от того, хотите ли вы текст или дату, также можно написать так:

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

который в вашем примере вернет это, с датой все еще меткой времени, которая может быть полезна, если вы собираетесь делать дальнейшие вычисления на нем, так как никакие преобразования не нужны:

 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() также принимает другие значения, например quarter, year etc. Вижу документация для всех значений


попробуйте

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;