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

求每月新增客户的SQL查询语句,现有语句无法正常运行

解决每月新增客户统计的SQL问题

看起来你当前的SQL语句存在两个核心问题:一是日期范围的顺序搞反了,二是它只能统计单一时间段的总客户数,没法按月份分组得到每个月的新增数据。咱们一步步来修正:

先纠正你当前语句的基础问题

你使用了BETWEEN CONVERT(date, getdate()) AND CONVERT(date, getdate()) - 30,但BETWEEN要求左侧日期必须小于等于右侧日期,而getdate()是当前日期,比getdate()-30晚30天,这个范围会直接返回空结果。正确的30天统计写法应该是:

SELECT COUNT(Name) AS 新增客户数
FROM Customer
WHERE Date_created BETWEEN CONVERT(date, GETDATE() - 30) AND CONVERT(date, GETDATE())

或者用更直观的条件写法(彻底避免顺序错误):

SELECT COUNT(Name) AS 新增客户数
FROM Customer
WHERE Date_created >= CONVERT(date, GETDATE() - 30)
  AND Date_created <= CONVERT(date, GETDATE())

实现按月份统计新增客户

如果你的需求是按每个自然月分组统计新增客户,需要用日期函数提取年份和月份,再进行分组聚合。这里以你用到的SQL Server为例:

方法1:按年+月分组(排序更便捷)

SELECT
  YEAR(Date_created) AS 年份,
  MONTH(Date_created) AS 月份,
  COUNT(DISTINCT CustomerID) AS 新增客户数 -- 优先用唯一客户ID替代Name,避免重名导致统计误差
FROM Customer
GROUP BY YEAR(Date_created), MONTH(Date_created)
ORDER BY 年份 DESC, 月份 DESC; -- 按时间倒序展示结果

方法2:格式化年月为字符串(可读性更强)

SELECT
  FORMAT(Date_created, 'yyyy-MM') AS 年月,
  COUNT(DISTINCT CustomerID) AS 新增客户数
FROM Customer
GROUP BY FORMAT(Date_created, 'yyyy-MM')
ORDER BY 年月 DESC;

补充提醒

  • 尽量用COUNT(DISTINCT CustomerID)代替COUNT(Name):客户名称存在重复的可能性,用唯一标识统计会更准确。
  • 如果你的数据库不是SQL Server,比如MySQL可使用DATE_FORMAT(Date_created, '%Y-%m'),PostgreSQL用EXTRACT(YEAR FROM Date_created),核心逻辑一致,仅日期函数语法略有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:52:19