每个日期的SQL计数

每个日期的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

我有以下需要

我有一个记录表,记录每天生成的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             | 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)