mysql 30天自动补0

java 复制代码
SELECT DATA.DAY,
  IFNULL(DATA.count, 0) AS cnt,
  day_list.DAY AS DATE
FROM
(
    SELECT
      @DATE := DATE_ADD(@DATE, INTERVAL - 1 DAY) DAY
    FROM
      (SELECT @DATE := DATE_ADD(CURDATE(), INTERVAL 1 DAY) FROM student) days
      LIMIT 30
  ) day_list 
  
  LEFT JOIN (SELECT DATE_FORMAT(birth_day, '%Y-%m-%d') DAY, count(id) count FROM student GROUP BY DAY) DATA 
  
  ON day_list.DAY = DATA.DAY

结果

这部分是从student表中,取出30条数据,并将日期+1赋值给@DATE变量

java 复制代码
(SELECT @DATE := DATE_ADD(CURDATE(), INTERVAL 1 DAY) FROM student) days
      LIMIT 30

这部分是将@DATE日期-1,并赋值给@DATE,下一次继续-1,赋值给@DATE,直到计算 出30天日期

java 复制代码
SELECT
      @DATE := DATE_ADD(@DATE, INTERVAL - 1 DAY) DAY

这部分是统计同一天出生的学生

java 复制代码
SELECT DATE_FORMAT(birth_day, '%Y-%m-%d') DAY, count(id) count FROM student GROUP BY DAY

所以整个整体就能将30天内同一天出生的学生人数统计出来

这个方案有个缺点,要求student表要超过30条,否则计算出的数据会缺少

相关推荐
大学生资源网3 小时前
java毕业设计之儿童福利院管理系统的设计与实现(源码+)
java·开发语言·spring boot·mysql·毕业设计·源码·课程设计
摇滚侠4 小时前
Redis 零基础到进阶,Redis 哨兵监控,笔记63-73
数据库·redis·笔记
利剑 -~4 小时前
mysql面试题整理
android·数据库·mysql
老华带你飞4 小时前
物流信息管理|基于springboot 物流信息管理系统(源码+数据库+文档)
数据库·vue.js·spring boot
程序员卷卷狗4 小时前
Redis事务与MySQL事务有什么区别?一文分清
数据库·redis·mysql
玩大数据的龙威4 小时前
农经权二轮延包—数据(新老农经权)比对软件更新
数据库·arcgis
保持低旋律节奏5 小时前
网络系统管理——期末复习
数据库
程序员佳佳5 小时前
2025年大模型终极横评:GPT-5.2、Banana Pro与DeepSeek V3.2实战硬核比拼(附统一接入方案)
服务器·数据库·人工智能·python·gpt·api
qq_12498707536 小时前
重庆三峡学院图书资料管理系统设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·spring·毕业设计