Группировать по времени даты 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;