假设表L1
月份 收入 支出 地区
202306 1000 500 A
202304 5888 2999 A
202307 3000 4500 C
202306 4000 5888 A
202307 5000 4000 A
202307 1000 1500 A
我想得出
地区 当月利润 上月利润
A 500 -1888
C 1500 0
我是这么写的
select 地区,
case when 月份='202307' then sum(收入)-sum(支出) else 0 end as 当月利润,
case when 月份='202306' then sum(收入)-sum(支出) else 0 end as 上月利润
from L1
group by 地区;
如果随着时间的变化,我想写动态的,那里面202307和202306可以怎么改呢
如果你想要动态地计算当月利润和上月利润,可以使用日期函数来获取当前月份和上个月的月份,并将其与表中的数据进行比较。
以下是修改后的查询语句:
SELECT 地区,
CASE WHEN 月份 = DATE_FORMAT(CURRENT_DATE, '%Y%m') THEN SUM(收入) - SUM(支出) ELSE 0 END AS 当月利润,
CASE WHEN 月份 = DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH), '%Y%m') THEN SUM(收入) - SUM(支出) ELSE 0 END AS 上月利润
FROM L1
GROUP BY 地区;
在这个查询中,我们使用了MySQL的日期函数:
CURRENT_DATE 返回当前日期。
DATE_FORMAT(date, format) 将日期格式化为指定的格式,如'%Y%m'表示年份和月份。
DATE_SUB(date, INTERVAL expr unit) 从给定日期减去指定的时间间隔。在这里,我们减去一个月来获取上个月的日期。
这样,每次运行查询时,它会根据当前日期自动计算当月利润和上月利润。
可以根据current_date获取当月,然后根据当月第一天 - 1 为上个月 获取上个月,最后to_char调整格式即可
select DATE_ADD(curdate(),interval -day(curdate())+1 day) -- 获取本月第一天