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

MySQL仅在月末执行插入行的实现问题求助

问题原因

你的SQL语句中,当当日不是月末时,WHERE里的日期条件不成立,但SELECT count(*)仍会返回0(因为count(*)在没有匹配行时始终返回0),所以会插入一行count=0的记录。要解决这个问题,核心是让SELECT语句在非月末时不返回任何结果行,这样INSERT就不会执行任何操作。

解决方案

以下两种方法都能满足你的需求:

方案一:子查询过滤日期条件

INSERT INTO ns_monthly_count (count)
SELECT cnt
FROM (
    SELECT count(*) AS cnt
    FROM ns_accounts a
    WHERE a.statusID = 1
) AS account_stats
WHERE CURDATE() = LAST_DAY(CURDATE());

逻辑说明:先统计符合statusID=1的账户数量,再在外层判断当日是否为月末。只有满足日期条件时,才返回统计值并执行插入;非月末时结果集为空,不会插入任何行。

方案二:使用HAVING子句

INSERT INTO ns_monthly_count (count)
SELECT count(*)
FROM ns_accounts a
WHERE a.statusID = 1
HAVING CURDATE() = LAST_DAY(CURDATE());

逻辑说明:利用count(*)是聚合函数的特性,HAVING子句会对聚合后的结果进行过滤。当日期条件不满足时,整个查询无结果返回,因此不会执行插入;月末时则返回统计数量并完成插入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:07:13