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とします。

各IDのクリックの累積合計のしきい値を満たさないクリックを削除するT-SQLを作成する必要があります。

したがって、上記の例では、ID "100001"の累積クリック数は60(10 + 20 + 30)ですが、しきい値が20であるため、最後のレコード、つまりクリック値が30のレコードは結果から削除されます。ただし、その時点での合計が私のしきい値(10 + 20)を超えている場合でも、2番目のレコードを含める必要があります。

編集 :

適用する必要があるもう1つの主要なルールは、計算を実行する前に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 に答える