我正在使用 SQL Server 2008。
我想编写一个查询来提供给定天数的总活动量。具体来说,我想统计过去 7 天每天的总票数。
我的桌子看起来像这样:
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
我需要我的结果看起来像这样
VoteDate ---- Total
2012-01-01 5
2012-01-02 6
2012-01-03 7
2012-01-04 1
2012-01-05 3
我的想法是我必须做这样的事情:
SELECT SUM(CASE WHEN Vote = 1 THEN 1 ELSE 0 END) AS Total
FROM Votes
GROUP BY VoteDate
此查询不起作用,因为它只计算(几乎完全)同时发生的投票。当然,我只想看看特定的一天。我怎样才能做到这一点?
将其投射为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)
Your VoteDate
列是一个datetime
,但你只想date
一部分。最简单的方法是将其转换为date
类型。您可以阅读有关 SQL Server 日期类型的更多信息here http://msdn.microsoft.com/en-us/library/ms186724.aspx.
如果你的Vote
列是 1 或 0,你可以这样做sum(vote) as Total
而不是做case
陈述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)