下面是原始表,我需要得到第2,5,6和7号,因为我需要所有非重复记录和每个表中最低位置的重复记录之一。
Col1 | Col2 | Col3
Qwe | 99 | A
Rty | 67 | B
Qwe | 23 | A
Uio | 66 | C
Uio | 99 | C
Asd | 11 | D
Qwe | 45 | A
解决方案是创建一个临时表,包含每个记录的实际ROWNUM和最大的rownum:
create table my_tab_temp as(
select mt.*,
last_value(rownum) over (partition by mt.col3 order by mt.col3 desc) as max_rownum,
rownum "ROW_NUM"
from my_tab mt
);
和选择我需要的记录:
select * from my_tab_temp mtt
where mtt.max_rownum = mtt.row_num;
结果:
Col1 | Col2 | Col3
Qwe | 45 | A
Rty | 67 | B
Uio | 99 | C
Asd | 11 | D
“Se” lect *“工作,如果”group by“存在。它至少不适用于DB2。 – mm759
我无法使用特定值查询表,因为查询会选择所有记录,包括具有最低位置的重复行 –