#mysql #sql
#mysql #sql
Вопрос:
У меня есть таблица с названием продавца, текущим балансом и датой. мне нужен итоговый баланс за каждый месяц. я попробовал этот код, но это дает мне последний текущий баланс, а не итоговый баланс за месяц.
запрос, который я пытаюсь —
select a.`merchant_name`, case when date(a.latest) between '2021-05-01' and '2021-05-31' then b.current_balance /* else null */ end as 'May', case when date(a.latest) between '2021-06-01' and '2021-06-31' then b.current_balance /* else null */ end as 'June', case when date(a.latest) between '2021-07-01' and '2021-07-31' then b.current_balance /* else null */ end as 'July', case when date(a.latest) between '2021-08-01' and '2021-08-31' then b.current_balance /* else null */ end as 'August', case when date(a.latest) between '2021-09-01' and '2021-09-31' then b.current_balance /* else null */ end as 'September', case when date(a.latest) between '2021-10-01' and '2021-10-31' then b.current_balance /* else null */ end as 'October', case when date(a.latest) between '2021-11-01' and '2021-11-31' then b.current_balance /* else null */ end as 'November' from ( select `merchant_name`, date(`created_at`) as created_at, min(`created_at`) as firstt, current_balance, max(`created_at`) as latest from balances os where `companies_id` in (100001,200002,300003) group by `companies_id` )a inner join balances b on a.latest= b.`created_at` and b.`merchant_name`=a.`merchant_name`;
Комментарии:
1. Вы получаете последний месяц для каждого продавца в подзапросе и используете его для расчета суммы, поэтому я не могу понять ваше удивление по поводу получения только последнего баланса! Если вам нужны ежемесячные суммы, просто сгруппируйте их по продавцу, году и месяцу и суммируйте значения. Вы должны предоставить примерные данные, ожидаемые результаты и фактические результаты, чтобы мы действительно помогли вам.
Ответ №1:
Сгруппируйте также по году/месяцу в подзапросе.
Но не во внешнем запросе.
select a.`merchant_name` , MAX(case when a.yearmonth = 202105 then b.current_balance end) as `May 2021` , MAX(case when a.yearmonth = 202106 then b.current_balance end) as `June 2021` , MAX(case when a.yearmonth = 202107 then b.current_balance end) as `July 21` , MAX(case when a.yearmonth = 202108 then b.current_balance end) as `August 2021` , MAX(case when a.yearmonth = 202109 then b.current_balance end) as `September 2021` , MAX(case when a.yearmonth = 202110 then b.current_balance end) as `October 2021` , MAX(case when a.yearmonth = 202111 then b.current_balance end) as `November 2021` from ( select `companies_id`, `merchant_name` , CAST(DATE_FORMAT(`created_at`,'%Y%m') AS UNSIGNED) as yearmonth , max(`created_at`) as latest from balances where `companies_id` in (100001, 200002, 300003) group by `companies_id`, `merchant_name` , CAST(DATE_FORMAT(`created_at`,'%Y%m') AS UNSIGNED) ) a inner join balances b on b.`companies_id` = a.`companies_id` and b.`merchant_name` = a.`merchant_name` and b.`created_at` = a.latest group by a.`companies_id`, a.`merchant_name`
Комментарии:
1. Действительно? Мило! И вот я подумал, не превратится ли это в дискуссию, чтобы заставить ее работать. О таких вещах, как формат, который не работает в вашей версии.