1

我有一张桌子:

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 的记录。但是,即使该点的总和 > 我的阈值 (10 + 20),仍应包括第二条记录。

编辑 :

另一个需要应用的主要规则是在执行任何计算之前必须对 INSERTDATE 进行排序

任何帮助将非常感激。

4

2 回答 2

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.

运行示例:http ://www.sqlfiddle.com/#!3/98173/11

更新

要通过点击而不是主键进行排序,只需更改行

where pk < c1.pk

where Clicks < c1.Clicks

运行示例:http ://www.sqlfiddle.com/#!3/31750/2

于 2012-10-03T16:53:02.763 回答
1

我希望我正确地阅读了这个问题。似乎太简单了:

SELECT ID, SUM(Clicks) AS Clicks 
FROM t1
WHERE Clicks <= 20                 -- <== this is your threshold
GROUP BY ID

会给你

ID 点击次数
100001 30
100002 35
于 2012-10-03T16:46:11.757 回答