在表格中选择第一个唯一值

时间:2017-05-24 16:44:41

标签: sql oracle plsql

我正在寻找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一起使用。任何帮助或指示都会非常感激。感谢。

2 个答案:

答案 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