什么是正确的日期函数来计算每周发生的次数

时间:2017-04-20 12:15:58

标签: sql-server

我想计算每日可用记录的数量,并每周合并报告。我写了下面的SQL,但它显示的数据超过一周。

select convert(varchar, CreatedDateTime, 101), COUNT(CreatedDateTime) as Count 
from dbo.table 
group by convert(varchar, CreatedDateTime, 101)

Union all

select 'Grand Total' CreatedDateTime,COUNT(CreatedDateTime) 
from dbo.table 
where CreatedDateTime >= DATEADD(WEEK,-1,getdate());

请建议。

2 个答案:

答案 0 :(得分:1)

你错过了转换日期的地点,尝试:

select convert(varchar, CreatedDateTime, 101), COUNT(CreatedDateTime) as Count 
FROM [Test_DB].[dbo].[table]
where convert(varchar, CreatedDateTime, 101) >= DATEADD(WEEK,-1,getdate())
group by convert(varchar, CreatedDateTime, 101)
Union all
select 'Grand Total' ,COUNT(CreatedDateTime) 
FROM [Test_DB].[dbo].[table]
where CreatedDateTime >= DATEADD(WEEK,-1,getdate());

答案 1 :(得分:0)

我创建了一些要使用的样本数据

CREATE TABLE CreatedDateTime
(
CreatedDateTime DATETIME
) 

将数据插入上表

INSERT INTO CreatedDateTime 
    VALUES
    (GETDATE()-8),
    (GETDATE()-8),
    (GETDATE()-8),
    (GETDATE()-8),
    (GETDATE()-8),
    (GETDATE()-8),
    (GETDATE()-8),
    (GETDATE()-6),
    (GETDATE()-6),
    (GETDATE()-1),
    (GETDATE()-1),
    (GETDATE()-1),
    (GETDATE()-1),
    (GETDATE()-1),
    (GETDATE()-1),
    (GETDATE()-2),
    (GETDATE()-2),
    (GETDATE()-2),
    (GETDATE()-2),
    (GETDATE()-2)

查询

select     
convert(varchar, CreatedDateTime, 101) as Date, 
COUNT(CreatedDateTime) as Total     
from dbo.CreatedDateTime     
where CreatedDateTime >= DATEADD(Week,-1,getdate())    
GROUP BY ROLLUP(CreatedDateTime)