SQL-按每天日期查询数据 没有数据缺失数据返回0 无需建表 若无当日数据也返回值 图表按天查询数据返回
admin
2024-02-01 12:31:33
0

文章目录

    • 1、SQL创建虚拟日期表
    • 2、业务逻辑查询需要和日期表查询的日期别名一致
    • 3、两个查询用左连接 联合查询

本博客环境背景:JAVA项目 & MYSQL数据库 ,需要能够按每日日期返回当天的数据值,若当日无数据应返回0。否则会造成当日数据缺失,值对应不上等问题。

看了很多实现方案都是直接在数据库里再建立一张时间表,存放日期数据,然后再联合查询。当时觉得再建一张表然后去改之前的所有内容有点太繁琐了,,然后发现可以创建时间虚拟表,直接改SQL联合查询即可,但其实最后发现也还是挺繁琐的。。大家选其一实现即可。

1、SQL创建虚拟日期表

直接使用如下语句可以创建一张虚拟日期表,可以按照从你需要的业务表(table1)中从取

SELECT@cdate: = date_add(@cdate, interval - 1 day) as date_str
FROM(SELECT @cdate: = date_add(CURDATE(), interval + 1 day) from table1) t1

2、业务逻辑查询需要和日期表查询的日期别名一致

create_date是逻辑按创建日期来查询,使用DATE_FORMAT()可以将“yyyy-MM-dd HH:mm:ss” 格式时间转成所需的“yyyy-MM-dd”日期格式。
日期只是示例查询样式,实际可以换成所需的startTime与endTime。

SELECT DATE_FORMAT(a.create_date, '%Y-%m-%d') as date_str, count(*) as date_count FROM table1 as a WHERE a.create_date>="2022-05-10 00:00:00" and a.create_date<"2022-09-13 23:59:00" GROUP BY DATE_FORMAT(a.create_date, '%Y-%m-%d')

3、两个查询用左连接 联合查询

需要使用左连接将逻辑查询与虚拟日期表联合起来查询。date_str是日期字段,date_count是所需要的统计数据字段
日期只是示例查询样式,实际可以换成所需的startTime与endTime;同时需要限制返回日期范围在最外面加上了同样的查询时间限制,实际如有需要最外层where这块也应要用DATE_FORMAT()适配转换一下
最后ORDER BY date_str , ASC默认升序,DESC默认降序

SELECT t1.date_str, COALESCE(t2.date_count, 0) as date_count
FROM(SELECT @cdate:=date_add(@cdate, interval - 1 day) as date_str FROM(SELECT @cdate:=date_add(CURDATE(), interval + 1 day) from task) tmp1
) t1
LEFT JOIN(SELECT DATE_FORMAT(a.create_date, '%Y-%m-%d') as date_str, count(*) as date_count FROM table1 as a WHERE a.create_date>="2022-05-10 00:00:00" and a.create_date<"2022-09-13 23:59:00" GROUP BY DATE_FORMAT(a.create_date, '%Y-%m-%d') 
) t2
on t1.date_str = t2.date_str
WHERE t1.date_str>="2022-05-10" AND t1.date_str<="2022-09-13"
ORDER BY t1.date_str ASC

利用日历表实现方式:https://blog.csdn.net/smilecall/article/details/78319242
直接创建日历表的方式搜到很多但未实际尝试过,也给出一个看起来比较合适的地址

参考:https://www.ancii.com/ankwpdeau/

相关内容

热门资讯

谁说我们不能进攻?安东尼奥变身... 北京时间1月21日消息,2026年U23亚洲杯半决赛继续展开争夺,中国U23男足3-0完胜越南队,创...
原创 红... 斑马消费 沈庹 传统男装市场萎缩,一众男装品牌日子难过,红豆股份就是其中一个典型。日前,公司披露,预...
与瑞安航空CEO骂战升级 马斯... 来源:财联社 世界首富埃隆·马斯克在与瑞安航空CEO迈克尔·奥利里爆发冲突后,提出了收购该航空公司...
精分患者不能光吃药,这3件事不... 提到精神分裂症的治疗,很多人第一反应就是“按时吃药”。不可否认,药物治疗是稳住病情的核心基石,能有效...
爱奇艺国际版2025年度全球内... 2026年1月20日,《爱奇艺国际版2025全球内容热播榜》正式发布,华语多样化内容正以前所未有的关...
美股异动 | 避险需求升温!白... 来源:华盛证券 华盛资讯1月20日讯,格陵兰岛危机引发贸易战担忧!金银价格集体创新高,黄金ETF $...
人事与股权“双震” 华富基金临... 记者 陈姗 自2025年年底以来,业内关于华富基金“双十”基金经理(基金管理经验超过10年、年化收益...
一天22个大V账号被封 平台出... 雪球大V“金浤”被罚之后,一天之内,22个大V账号被永久封禁,平台连续出手整治涉资本市场违规行为。 ...
罕见!自砍七成融资规模,百瑞吉... 导读:过去一年中,为了尽快向A股大门靠近,百瑞吉还付出了不小的代价——大幅削减融资规模。近年来,拟北...
氢能商业化难题待解,记者实探云... 本报(chinatimes.net.cn)记者胡雅文 曲靖报道 氢能商业化仍在探索中。 近年来国家和...
原创 西... 哥本哈根街头,上万名示威者举着“绝不出售格陵兰岛”的标语走向美国驻丹麦大使馆,寒冷的北欧空气中弥漫着...
成品油价或年内首涨! 今日(1月20日)24时,国内成品油新一轮调价窗口将开启。综合多家机构预测,成品油价或年内首涨,消费...
原创 电... 外资来了,不是随便逛街,是掏钱出手,高盛、瑞银、摩根士丹利、摩根大通四家都在名单上,其中三家在202...
信用卡分期纳入贴息,多家银行迅... 【大河财立方消息】1月20日,财政部、中国人民银行、金融监管总局发布《关于优化实施个人消费贷款财政贴...
原创 金... “好家伙,前几天还说金价破纪录了,这转头又掉下来了?这过山车坐的,心脏真受不了。”最近但凡关心点金价...
卖不动了?巨头宣布:降价!10... 自2022年见顶以来,受主要消费国奢侈品消费降温、培育钻石日益走俏等因素影响,钻石行业正遭遇现代史上...
鸣鸣很忙开启招股,2万家店撑起... 1月20日,中国最大的休闲食品饮料连锁零售商——湖南鸣鸣很忙商业连锁股份有限公司(下称“鸣鸣很忙”)...
原创 继... 去年九月的那个深夜,白俄罗斯边境毫无征兆地熄火了,原本跑得飞快的中欧班列,在那一刻被人按下了暂停键。...
供应扰动再发酵,碳酸锂尾盘涨停... 经历了一次急速回调后,碳酸锂期货又杀了一个“回马枪”。 1月20日,碳酸锂期货主力合约在尾盘触及涨停...
原创 融... 2026年伊始,A股市场便以一派火热景象迎接投资者,市场热度在多个维度均有所体现,尤其以融资余额的迅...