我有用户数据表.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中获取相同的周数吗?
答案 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