qq_18755867 2022-04-24 11:28 采纳率: 100%
浏览 42
已结题

SQL如何获取月汇总数据和年汇总数据?

如果表里日期字段 为 手动选择 2022-02-05 那天,
月汇总数据公式 怎么写 获取 从2022-02-01 (月初) 到 2022-02-05 日的数据?
年汇总数据公式 怎么写 获取 从2022-01-01 (年初) 到2022-02-05 日的数据?

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-04-24 13:22
    关注

    请说明一下你用的是什么数据库,以及数据库版本,还有你这个日期字段的数据类型是什么。
    如果是要分别查两个汇总,直接写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';
    

    img


    用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语法不需要我解释了吧?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月24日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)