多行计算SQL Server

时间:2012-10-03 16:42:40

标签: sql-server tsql

我有一张桌子:

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

非常感谢任何帮助。

2 个答案:

答案 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

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

更新

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

即可
where pk < c1.pk

where Clicks < c1.Clicks

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

答案 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