5

このクエリを実行すると、より多くの行が取得され、ROW_NUMBER () 行なしでクエリが実行されます。

SELECT DISTINCT id, value,  
ROW_NUMBER ()   over (partition by  (id)   ORDER BY  value  desc NULLS LAST  ) max  
FROM TABLE1 
WHERE id like '%1260' ORDER BY id ASC

VS

SELECT DISTINCT id, value
FROM TABLE1 
WHERE id like '%1260' ORDER BY id ASC

なぜそれが起こり、どのように修正するのですか?

4

3 に答える 3

4

このように考えてみてください。同じ ID と値を持つ 2 つの行がある場合、2 番目のクエリは、異なる ID と値のペアを持つ 1 つの行を返します。1 つ目は 2 つの行を提供します。1 つは row_number() が 1 で、もう 1 つは row_number() が 2 です。

次のデータの場合:

ID   VALUE
--   -----
1    XXX
1    XXX

クエリ 1 が返されます

ID  VALUE   MAX
--  -----   ---
1   XXX      1
1   XXX      2

クエリ 2 が返されます

ID  VALUE
--  -----
1   XXX
于 2012-09-11T05:19:54.877 に答える
4

行番号を追加したため、行は同じではなくなったため、DISTINCT何もしません。これを回避する 1 つの方法は、使用DISTINCTに行番号を追加することです。

SELECT id, value, ROW_NUMBER ()   over (partition by  (id)   ORDER BY  value  desc NULLS LAST  ) max
FROM (
    SELECT DISTINCT id, value
    FROM TABLE1 
    WHERE id like '%1260'
) AS subquery
ORDER BY id ASC

(構文が Oracle に適しているかどうかはわかりません。微調整が必​​要な場合があります。)

于 2012-09-11T05:20:01.677 に答える
0

Oracle 11g R2 を使用している場合は、これを試してください。

WITH DistinctRow 
AS
(
     SELECT DISTINCT id, value
     FROM TABLE1 
     WHERE id like '%1260'
)
SELECT id, value,  
       ROW_NUMBER() over (partition by (id) ORDER BY value desc NULLS LAST) max  
FROM DistinctRow 
ORDER BY max ASC
于 2012-09-11T05:26:50.850 に答える