试图获得一个 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 天的创建。
我正在尝试从 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 天的创建。