我有一张桌子:
UNIQUE KEY ID Clicks INSERTDATE
1 100001 10 2011-05-14 00:00:00.000
2 100001 20 2011-05-13 00:00:00.000
3 100001 30 2011-05-18 00:00:00.000
4 100002 10 2011-05-20 00:00:00.000
5 100002 15 2011-05-24 00:00:00.000
6 100002 10 2011-05-05 00:00:00.000
我有点击的阈值,比方说20。
我需要编写一个T-SQL,它应该删除不符合每个ID累积点击次数阈值的点击次数。
因此,对于上面的示例,ID“100001”的累积点击次数为60(10 + 20 + 30),但由于阈值为20,因此最后一条记录(即点击值为30)应从结果中删除。 然而,即使该点的总和> 1,仍应包括第二记录。我的门槛(10 + 20)。
编辑:
需要应用的另一个主要规则是在执行任何计算之前必须订购INSERTDATE
非常感谢任何帮助。
答案 0 :(得分:3)
如果我正确理解了这个问题,你想过滤给定Id的RunningTotal,如下:
select c1.*
from ClickTable c1
outer apply (
select sum(Clicks) as RunningTotal
from ClickTable
where pk < c1.pk
and id = c1.id
) c2
where isnull(RunningTotal, 0) <= 20
这意味着表中有一个唯一的关键字段,称为PK
。
要按点击而不是主键排序,只需更改行
即可where pk < c1.pk
到
where Clicks < c1.Clicks
答案 1 :(得分:1)
我希望我能正确地阅读这个问题。似乎太简单了:
SELECT ID, SUM(Clicks) AS Clicks
FROM t1
WHERE Clicks <= 20 -- <== this is your threshold
GROUP BY ID
会给你
ID Clicks 100001 30 100002 35