每个日期的SQL计数
我有以下需要 我有一个记录表,记录每天生成的som Lead 现在,我需要在过去10天内每天的潜在客户数量上做一份报告 假设该表如下所示:每个日期的SQL计数,sql,tsql,Sql,Tsql,我有以下需要 我有一个记录表,记录每天生成的som Lead 现在,我需要在过去10天内每天的潜在客户数量上做一份报告 假设该表如下所示: tbl_leads id int, first_name nvarchar(100), last_name nvarchar(100), created_date datetime counted_leads | count_date 5 | 2009-04-30 7 | 2009-04-29 5
tbl_leads
id int,
first_name nvarchar(100),
last_name nvarchar(100),
created_date datetime
counted_leads | count_date
5 | 2009-04-30
7 | 2009-04-29
5 | 2009-04-28
7 | 2009-04-27
我需要计算每天的潜在客户数量,总共10天。
因此,结果集应该如下所示:
tbl_leads
id int,
first_name nvarchar(100),
last_name nvarchar(100),
created_date datetime
counted_leads | count_date
5 | 2009-04-30
7 | 2009-04-29
5 | 2009-04-28
7 | 2009-04-27
。。。等等
有人知道如何以最好的方式做到这一点吗?
我当前的解决方案是使用c语言中的foreach进行迭代,但我非常希望将其交给sql server,而不是sp。您可以使用:
Select
count(created_date) as counted_leads,
created_date as count_date
from
table
group by
created_date
您创建的_date字段是datetime,因此,如果您想按日期进行分组,则需要在分组生效之前去掉时间:
SELECT COUNT(created_date), created_date
FROM table
WHERE DATEDIFF(created_date, getdate()) < 10
GROUP BY convert(varchar, created_date, 101)
最有效的方法是按整数进行聚合,然后转换回datetime进行表示
select
cast(daybucket - 1 as datetime) as count_date,
counted_leads
from
(select
cast(created_date as int) as DayBucket,
count(*) as counted_leads
from mytable
group by cast(created_date as int) ) as countByDay
谢谢
当您将DateTime转换为在中午截断的整数时,您可能希望这样将一天剥离出去
cast(DATEADD(DAY, DATEDIFF(DAY, 0, created_date), 0) as int) as DayBucket
我也有类似的问题,但我的问题涉及到一列Convertdate,mydatetime。我不得不将最佳答案修改如下:
Select
count(created_date) as counted_leads,
Convert(date,created_date) as count_date
from table
group by Convert(date,created_date)
我用了这个,但是创建的日期是一个有完整日期时间的字段,所以我不得不应用这个小技巧:DATEADDdd,0,DATEDIFFdd,0,在分组中按部分创建日期,它就像一个符咒一样工作!!:同时将countcreated_date更改为Count。带有列的计数仅对非空值进行计数。因此,如果列可为空,则它可能比计数慢。即使此问题/答案很旧:要获取没有时间的日期,您可以使用DATEcreated_date而不是raw created_date-因此结果将按日期分组,而不使用时间!这里的where子句可能会在最早的dayint不如varchar工作时为您提供部分天数的计数。int经常将日期分组在一起。我也看到了int转换的问题。我在2013/12/21有6条记录,int版本返回的计数为1。Varchar版本返回的计数为6。
Select
count(created_date) as counted_leads,
Convert(date,created_date) as count_date
from table
group by Convert(date,created_date)