当我运行此查询时,我会获得更多行,然后在没有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
为什么会发生以及如何解决?
答案 0 :(得分:3)
这样想:如果你有两行具有相同的id和值,第二个查询会给你一行具有不同的id,value对。第一行给你两行,一行的row_number()为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
答案 1 :(得分:2)
由于您添加了行号,因此行不再相同,因此DISTINCT
无法执行任何操作。避免这种情况的一种方法是在之后使用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,可能需要稍微调整一下。)
答案 2 :(得分: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