在MS SQL中每周获取最近一年的记录

时间:2017-03-13 06:25:32

标签: sql sql-server

我有用户数据表.Columns是Username,Datetime 我需要每周从当前日期获取最近一年数据的用户数 我写了一个查询来获取最后一年的记录,但我无法找到每周检索数据的方法。
以下是以日为单位获取数据的查询。

select count(Username) 
from tablename
where (Datetime > DATEADD(year,-1,GETDATE()) and Datetime< GETDATE()-1)
group by Datetime
order by Datetime asc    

任何人都可以帮我在sql server中获取相同的周数吗?

5 个答案:

答案 0 :(得分:1)

尝试:您必须按week进行分组,以便您可以通过以下方式完成:

SELECT COUNT(Username) 
from tablename
where (Datetime > DATEADD(year,-1,GETDATE()) and DATETIME < GETDATE()-1)
group by DATEPART(wk,[DATETIME])
order by [Datetime] ASC

注意:请尽量避免使用reserved words作为列名,并且可以在[]中附加现有的一个。

答案 1 :(得分:1)

使用DATEPART IN GROUP BY子句。其中condition首先过滤一年记录,然后根据DATEPART函数进行分组以获得周计数

SELECT COUNT(Username) , DATEPART(WEEK,Datetime) 
FROM tablename
WHERE DATEDIFF(YEAR,Datetime,GETDATE()) <= 0 AND     
DATEDIFF(YEAR,Datetime,DATEADD(YEAR,-1,GETDATE())) >= 0
GROUP BY DATEPART(WEEK,Datetime) 

答案 2 :(得分:0)

您只需更改group by和order by子句,如下所示。

group by datepart(week,Datetime)
order by datepart(week,Datetime) asc 

答案 3 :(得分:0)

首先,您需要指定额外的列,指向一年中的哪一周。 你可以像这样创建它(我假设你有更多年的数据,让我们调用我们的专栏Date):

CASE WHEN Date BETWEEN '2017-01-01 00:00:00.000' AND '2018-01-01 00:00:00.000'
    THEN floor(cast(datediff(dd, '2017-01-01 00:00:00.000',Date) as real) / 7)
    END AS [Week]

其次,您必须运行查询:

SELECT COUNT(Username) FROM tablename
GROUP BY [Week]

答案 4 :(得分:0)

SELECT *, WEEK(created_on) week
FROM Table_Name
WHERE created_on > DATEADD(year,-1,GETDATE())
ORDER BY week