#postgresql #postgresql-9.3
#postgresql #postgresql-9.3
Вопрос:
На моей работе мне приходится запускать запрос (или я должен сказать, что это сделало бы мою жизнь в 100 раз проще), который возвращает -Сумма всех платежей за каждый месяц года -Итоговый баланс в конце каждого месяца.
Чтобы получить последнее, мне нужно выбрать столбец ‘ending_balance’ последней записи каждого месяца. У меня уже есть сумма, поэтому весь запрос будет выглядеть следующим образом
select
extract(month from request_date):: integer as mon,
extract(year from request_date)::integer as year,
<missing logic here>
sum(total_amount),
from my_table group by 1,2 order by 2
Я искал ответ на stackoverflow и других сайтах в течение половины дня, и я выяснил, как получить значение для ОДНОГО месяца и года через
select payer_id
from my_table as last_payer
where extract(month from request_date):: integer = '2'
and extract(year from request_date)::integer= '2019'
order by request_date desc limit 1
но это работает, только если я указываю конкретную дату. Мне нужно что-то, что делает это для каждого месяца и года. Замена жестко заданных значений на ‘mon’ и ‘year’ не работает.
Я также добавлю, что я работаю над dbeaver, который, как мне кажется, не поддерживает функции, но если функции — единственный способ, которым я могу это сделать, я думаю, я переключусь на простое использование командной строки.
Комментарии:
1. Можете ли вы поделиться некоторыми примерами данных и желаемыми результатами. Не очень понятно, что означает
ending_balance
значение последней записи каждого месяца». Держу пари , что коррелированный подзапрос или производная таблица помогли бы здесь, но я чувствую, что делаю некоторые предположения.2. На самом деле я не хочу делиться информацией, которая слишком специфична для моей базы данных jobs, но «конечный баланс» — это просто значение a в каждой записи базы данных. Итак, в основном я хочу выбрать столбец из последней записи каждого месяца.
3. нельзя ли просто использовать оператор between между двумя датами? таким образом, у вас будет больше контроля между верхним и нижним пределом, и вы получите то, что хотите!
4. Как бы мне это сделать, чтобы в каждой строке были установлены даты в месяцах? Я знаю, как указать конкретные даты или использовать now (), но я не знаю, как я буду делать это для каждого месяца в году или за все время.
Ответ №1:
Этот запрос поможет вам.
Определенный месяц каждого года.
select * from
(select
concat(extract(month from request_date):: integer,
extract(year from request_date)::integer) as dt
from table1) as a
group by dt
просто добавьте sum
каждой группы.