如果表里日期字段 为 手动选择 2022-02-05 那天,
月汇总数据公式 怎么写 获取 从2022-02-01 (月初) 到 2022-02-05 日的数据?
年汇总数据公式 怎么写 获取 从2022-01-01 (年初) 到2022-02-05 日的数据?
请说明一下你用的是什么数据库,以及数据库版本,还有你这个日期字段的数据类型是什么。
如果是要分别查两个汇总,直接写where条件限定时间,然后sum即可。
如果是要同时查两个汇总,那么where条件里写时间最大的范围,在sum里写case when条件来限定时间。
然后重点就是根据一个指定的日期计算月初和计算年初是分别哪一天了,这关键就看你用什么数据库,因为不同数据库计算日期的函数及方式不一样,而且还要根据字段类型来选择不同的处理方式
把下面where条件中指定的这个日期替换成你的变量即可
create table test_20220424 (a smalldatetime);
insert into test_20220424 values ('2022-04-24');
insert into test_20220424 values ('2022-04-01');
insert into test_20220424 values ('2022-01-24');
insert into test_20220424 values ('2022-03-24');
--指定日期的月初至指定日期
select * from test_20220424 where
a between convert(varchar(8),'2022-04-24',120)+'1' and '2022-04-24';
--指定日期的年初至指定日期
select * from test_20220424 where
a between convert(char(4),year('2022-04-24'))+'0101' and '2022-04-24';
用dateadd函数计算,减一年,就是去年当日
dateAdd(year,-1,'2022-04-24')
然后拿这个去年当日,套用上面的方法,可得去年当日的当月
convert(varchar(8),dateAdd(year,-1,'2022-04-24'),120)+'1'
同理,拿今年的年初 convert(char(4),year('2022-04-24'))+'0101' 减1年,就能得去年的年初
dateAdd(year,-1,convert(char(4),year('2022-04-24'))+'0101')
当然也可以用上面计算年初的方式,传入去年当日 dateAdd(year,-1,'2022-04-24')
convert(char(4),year(dateAdd(year,-1,'2022-04-24')))+'0101'
日期计算这玩意就是层层套娃,只要知道几个基本的函数,转换加减就行了
至于between and语法不需要我解释了吧?
select * from table t where 1=1 and
${
if(len(mdate)=0,"","and t.date<=to_date('"+mdate+"','yyyy-mm-dd')")
t.date>=to_date
((substr('"+mdate+"',1,8)||'01'),'yyyy-mm-
dd')")
}
and
${
if(len(ydate)=0,"","and t.date<=to_date('"+ydate+"','yyyy-mm-dd')")
t.date>=to_date
((substr('"+ydate+"',1,5)||'01-01'),'yyyy-mm-
dd')")
}