我有一个数据库,其中包含有关我网站上项目的网页浏览量的数据。每行都有Date,ItemId(guid字符串)和Views(int)。在不同日期有许多行具有相同的ItemId。我想用视图的总和将所有这些聚合成一行。例如:
Date |ItemId |Views
2017-12-18 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |1
2017-12-17 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |3
2017-12-12 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |5
2017-12-07 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |1
我想得到以下内容:
ItemId | Views
6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB | 10
此外,我需要能够按日期过滤,例如WHERE [Date] between '12/15/2017' and GetDate()
Where子句很简单,但我该如何进行分组/求和?请记住,我不是只汇总一个ItemId,我想将ItemId相同的所有行分组,以便我可以得到每个项目的视图总和。
答案 0 :(得分:2)
只需使用GROUP BY
:
SELECT
ItemId,
SUM(Views) AS Views
FROM yourTable
WHERE [Date] BETWEEN '2017-12-15' AND GETDATE()
GROUP BY ItemId;
附注,但是here is a link到MSDN文档,描述了SQL Server的有效日期/时间文字。我更喜欢使用上面给出的ISO格式,但您使用的m/d/y
也是有效的。
答案 1 :(得分:0)
我认为你需要一个子查询,因此WHERE子句限制不会改变整体视图计数。如下所示:
SELECT
ItemId,
sum(Views) as viewCount
FROM table t1
WHERE exists (Select itemid From table t2 Where t2.itemid = t1.itemid and [Date] BETWEEN '2017-12-15' AND GETDATE())
GROUP BY ItemId;