试图获得一个 SQL 命令来获取每个月的新客户,但我似乎无法让它工作

Trying to get an SQL command that gets the new customers from each month but i cant seem to get it working

我正在尝试从 SQL 数据库中提取每个月的新客户。我试过这个:

SELECT COUNT (Name) 
FROM Customer 
WHERE Date_created BETWEEN CONVERT(date, getdate()) AND CONVERT(date, getdate()) - (30)

您可以使用 convert(varchar(6), getdate(), 112) 获取 yyyymm 格式的月份:

SELECT  convert(varchar(6), getdate(), 112) as Month
,       count(*)
FROM    Customer
GROUP BY
        convert(varchar(6), getdate(), 112)

标准 SQL:

select
   extract(year from Date_created) as yr
  ,extract(month from Date_created) as mth
  ,count(*) 
from Customer
group by
   extract(year from Date_created) as yr
  ,extract(month from Date_created) as mth
order by yr, mth

用您的 DBMS 中的匹配函数替换 EXTRACT,例如对于 SQL 服务器 datepart(year, date)

根据您的查询,我认为这样做会更简单:

SELECT COUNT (Name) FROM Customer WHERE MONTH(Date_created)= MONTH(GETDATE())

虽然我不确定这是否是您所期望的,因为您的问题可以用多种方式解释

编辑:考虑到不同年份:

SELECT COUNT (Name) FROM Customer 
WHERE MONTH(Date_created)= MONTH(GETDATE())
AND YEAR(Date_created)= YEAR(GETDATE())

我不喜欢将 BETWEEN 与日期一起使用(请参阅此博客 What do BETWEEN and the Devil Have in Common)。但是,您查询的问题是日期顺序错误。较小的值必须先行:

SELECT COUNT(Name) 
FROM Customer 
WHERE Date_created BETWEEN CONVERT(date, getdate() - 30) AND CONVERT(date, getdate())

最好写成:

SELECT COUNT(Name)
FROM Customer
WHERE Date_Created >= CONVERT(date, getdate() - 30) AND
      Date_Created < CONVERT(date, getdate());

我不确定这是否满足您对“月”的定义,但至少查询将 return 30 天的创建。