You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL按指定年月筛选timestamp字段统计患者诊断数求助

解决按指定年月筛选诊断记录的问题

嘿,作为SQL初学者能写出基础的统计语句已经很棒啦!你之前的语句里,按年月筛选的部分写法有点问题,我来帮你修正,还会给你两种实用的方案~

首先说下你原来的问题:updated_at = month(5)&year(2019)这个写法是不对的——MONTH()和YEAR()是用来从日期字段里提取对应值的函数,不是这么传参数的,而且&是位运算符号,我们筛选条件应该用逻辑与AND。

下面给你两种可行的解决方案:

方案一:用日期函数提取年月(直观易懂)

直接从updated_at里提取年份和月份,然后和你指定的2019年5月做匹配:

SELECT diagnosis, COUNT(diagnosis) AS total 
FROM patient_records 
WHERE deleted_at IS NULL 
  AND YEAR(updated_at) = 2019 
  AND MONTH(updated_at) = 5 
GROUP BY diagnosis;

这个写法很直观,适合刚开始接触SQL的朋友,一眼就能看明白是在筛选2019年5月的记录。

方案二:用日期范围匹配(性能更优)

如果你的patient_records表数据量比较大,或者updated_at字段有索引的话,更推荐用日期范围来筛选,因为函数包裹字段可能会让索引失效,影响查询速度:

SELECT diagnosis, COUNT(diagnosis) AS total 
FROM patient_records 
WHERE deleted_at IS NULL 
  AND updated_at >= '2019-05-01' 
  AND updated_at < '2019-06-01' 
GROUP BY diagnosis;

这个语句的逻辑是:筛选updated_at在2019年5月1日零点(含)到2019年6月1日零点(不含)的所有记录,这样就能精准覆盖5月整月的所有时间点,同时能利用索引提升查询效率。

你可以根据自己的实际情况选择其中一种方案试试哦~

内容的提问来源于stack exchange,提问作者Ken Verganio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:27:48