0
私はfloat
値のテーブルを持っています。 PERCENT_RANK()
を使用してこれらの値のサブセット(A)を使用してランクを作成したいとします。次に、最初のサブセット(A)から派生したランクに基づいて、テーブル内の値の第2の(交差しない)サブセット(B)にランクを割り当てる必要があります。サブセット(B)の値は一般的にサブセット(A)の値と等しくないので、単に(B)から(A)の値を結合することはできません。その場合、ランクを取得するために、「最も近い値」アプローチまたは「直線補間」アプローチのいずれかを使用しても問題ありません。私は何十万行も処理しているので、私の好みはスピードとシンプルさです。SQLで別のデータセットを使用して1つのデータセットをランク付けする方法は?
ここで(FLAG = 0と部分集合Bがどこにある部分集合Aを想定あるフラグ= 1)の具体例である:
DECLARE @Data TABLE
(
Value FLOAT,
Flag BIT
)
INSERT INTO @Data SELECT 0.081, 0
INSERT INTO @Data SELECT 0.831, 0
INSERT INTO @Data SELECT 0.798, 0
INSERT INTO @Data SELECT 0.722, 0
INSERT INTO @Data SELECT 0.322, 0
INSERT INTO @Data SELECT 0.186, 0
INSERT INTO @Data SELECT 0.494, 0
INSERT INTO @Data SELECT 0.757, 0
INSERT INTO @Data SELECT 0.996, 0
INSERT INTO @Data SELECT 0.146, 0
INSERT INTO @Data SELECT 0.514, 1
INSERT INTO @Data SELECT 0.787, 1
INSERT INTO @Data SELECT 0.125, 1
INSERT INTO @Data SELECT 0.324, 1
INSERT INTO @Data SELECT 0.86, 1
--Subset A
SELECT *,
Rnk = PERCENT_RANK() OVER (ORDER BY Value)
FROM @Data
WHERE Flag = 0
--Subset B
SELECT *,
Rnk = ?--Ranking based on ranks derived from subset A
FROM @Data
WHERE Flag = 1
この[リンク](http://sqlmag.com/t-sql/last-non-null-puzzle)非常に高速なソリューションへの束を私を助けてしまった:これは、1つの方法です。 – Joe