如何查询获得过去七天的总数?

Evi*_*mes 6 sql t-sql sql-server

我正在使用SQL Server 2008.

我想写一个查询,给我一些给定天数的总活动.具体来说,我想计算过去七天每天的总票数.

我的表看起来像这样:

 VoteID --- VoteDate --------------  Vote --- BikeID

 1          2012-01-01 08:24:25      1        1234 
 2          2012-01-01 08:24:25      0        5678
 3          2012-01-02 08:24:25      1        1289
 4          2012-01-03 08:24:25      0        1234
 5          2012-01-04 08:24:25      1        5645
 6          2012-01-05 08:24:25      0        1213
 7          2012-01-06 08:24:25      1        1234
 8          2012-01-07 08:24:25      0        1125
Run Code Online (Sandbox Code Playgroud)

我需要我的结果看起来像这样

VoteDate ---- Total
2012-01-01    5
2012-01-02    6
2012-01-03    7
2012-01-04    1
2012-01-05    3
Run Code Online (Sandbox Code Playgroud)

我的想法是我必须做这样的事情:

SELECT    SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Total
FROM      Votes
GROUP BY  VoteDate
Run Code Online (Sandbox Code Playgroud)

此查询不起作用,因为它只计算同时发生(几乎完全)的投票.当然,我想只关注某一天.我该如何实现这一目标?

Eri*_*ric 11

把它当作一个date:

SELECT    
     cast(VoteDate as date) as VoteDate, 
     SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Total
FROM      Votes
WHERE VoteDate between dateadd(day, -7, GETDATE()) and GETDATE()
GROUP BY  cast(VoteDate as date)
Run Code Online (Sandbox Code Playgroud)

你的VoteDate专栏是一个datetime,但你只想要date它的一部分.最简单的方法是将其转换为date类型.您可以在此处阅读有关SQL Server日期类型的更多信息.

如果你的Vote列是1或0,你可以做sum(vote) as Total而不是做case声明.

  • 要添加到Eric的答案,您还可能希望添加WHERE子句,以便仅在过去7(或N)天内首先检索数据.否则,您将对整个集合(可能非常大)执行GROUPing操作,然后仅获取最后7(或N)天的聚合数据. (2认同)