我正在寻找SQL如何在表中为列OBJID选择第一个唯一值。我想要的是结果,其中第一次存在OBJID(分组依据)或(不同)并不起作用。我也到处搜索过,但是找不到合适的解决办法。有没有人知道如何获得结果,其中每个OBJID只有一行,其值来自行。
OBJID OTHER YEAR TYPE OBJID OTHER YEAR TYPE
AA 4 2001 e36 AA 4 2001 e36
AA 5 2001 e36
AA 6 2001 e38
BB 7 2001 e38 BB 7 2001 e38
CC 8 2001 e38 CC 8 2001 e38
DD 9 2001 e38 DD 9 2001 e38
EE 10 2001 e38 EE 10 2001 e38
FF 11 2001 e38 FF 11 2001 e38
GG 12 2001 e39 GG 12 2001 e39
HH 1 2001 e39 HH 1 2001 e39
HH 1 2001 e39
HH 1 2001 e39
II 1 2001 e39 II 1 2001 e39
II 2 2001 e39
JJ 1 2001 e39 JJ 1 2001 e39
JJ 2 2001 e39
KK 1 2001 e39 KK 1 2001 e39
KK 2 2001 e39
KK 2 2001 e39
KK 3 2001 e39
所以有20行输入,我希望每个OBJID都是唯一的,所以11行输出将与ORACLE SQL一起使用。任何帮助或指示都会非常感激。感谢。
答案 0 :(得分:1)
您将在Oracle中使用row_number()
。但是你需要用“第一”来指定你的意思:
select t.*
from (select t.*,
row_number() over (partition by objid order by ?? asc) as seqnum
from t
) t
where seqnum = 1;
您需要在order by
中指定定义第一行的列。替换??
。
答案 1 :(得分:0)
我认为应该这样做
wITH temptab AS (
SELECT a.OBJID, a.OTHER, a.YEAR, a.type,
ROW_NUMBER() OVER(PARTITION BY a.OBJID ORDER BY OTHER) AS rnumber
FROM table1 a)
SELECT x.*
FROM temptab x
WHERE x.rnumber = 1