3

次のようなデータのテーブルがあるとします。

ItemNo    |    ItemCount   |    Proportion
------------------------------------------
1              3                0.15 
2              2                0.10
3              3                0.15
4              0                0.00
5              2                0.10
6              1                0.05
7              5                0.25
8              4                0.20

つまり、合計20個のアイテムがあり、それぞれの累積比率はItemNo100%になります。ここでは、テーブル行の順序が重要です。

ループやカーソルを使用せずにSQLクエリを実行して、累積比率を超える最初 のクエリを返すことはできますか?ItemNo

言い換えると、チェックしたい「比率」が35%の場合、ItemNo 30.15 + 0.10 + 0.15 = 0.40であるため、それを超える最初の行はです。

同様に、75%を超える最初の行を見つけたい場合、その行までItemNo 7のすべての合計がProportion0.75未満になるため、これはになります。

4

2 に答える 2

5
select top 1
  t1.ItemNo
from
  MyTable t1
where
  ((select sum(t2.Proportion) from MyTable t2 where t2.ItemNo <= t1.ItemNo) >= 0.35)
order by
  t1.ItemNo
于 2011-10-27T10:28:36.257 に答える
3

ウィンドウ関数の古典:

SELECT * 
FROM   (
    SELECT ItemNo
          ,ItemCount
          ,sum(Proportion) OVER (ORDER BY ItemNo) AS running_sum
    FROM   tbl) y
WHERE  running_sum > 0.35
LIMIT  1;

とりわけPostgreSQLで動作します。

または、tSQL表記(使用しているようです):
SELECT TOP 1 *
FROM(
SELECT ItemNo
、ItemCount
、sum(Proportion)OVER(ORDER BY ItemNo)AS running_sum
FROM tbl)y
WHERE running_sum> 0.35;

以下にコメントするように、tSQLでは機能しません。

于 2011-10-27T10:34:09.200 に答える