需要检索不同的记录但是

时间:2017-05-07 17:39:00

标签: sql oracle

我想检索没有重复记录的数据..问题是重复的记录在所有列中都有类似的值,除了一个名为seq_id的特定列,所以我不能使用distinct ...我的select必须有seq_id ... this是代码

SELECT x.seq_id,
       y.name,
       x.user,
       x.time_1,
       y.acc_num
FROM table1 y,
     table2 x
WHERE y.c_id=x.m_id;

结果如下所示

╔════════════════════════════════════════════════════╗
║ Seq_id      |name      |user      |time     |acc_n ║
╠════════════════════════════════════════════════════╣
║ 100         jim.        Ali.      10:11:30  0098   ║
║ 101         jim.        Ali.      10:11:30  0098   ║
║ 102         john        sam       04:19:30  0097   ║
╚════════════════════════════════════════════════════╝

我希望它像

╔═════════════════════════════════════════╗
║ Seq_id |name  |user   |time      |acc_n ║
╠═════════════════════════════════════════╣
║ 100    jim.   Ali.    10:11:30   0098   ║
║ 102    john   sam     04:19:30   0097   ║
╚═════════════════════════════════════════╝

2 个答案:

答案 0 :(得分:5)

  

"选择哪个[seq_id]并不重要..我只想要其中一个"

在这种情况下,简单聚合将为您解决此问题。

SELECT min(x.seq_id) as seq_id,
       y.name,
       x.user,
       x.time_1,
       y.acc_num
FROM table1 y,
     table2 x
WHERE y.c_id=x.m_id
group by y.name,
       x.user,
       x.time_1,
       y.acc_num;

答案 1 :(得分:1)

首先,请避免使用旧的连接语法。请改用INNER JOIN

现在除了APC的答案之外,您还可以使用分析功能来实现相同的目标。

Select * from 
 (SELECT x.seq_id,
       y.name,
       x.user,
       x.time_1,
       y.acc_num,
       Row_number() over (partition by  
       y.name, x.user, x.time_1,y.acc_num 
       order by x.seq_id) as rno 
 FROM 
  table1 y
    INNER JOIN
  table2 x 
    ON y.c_id=x.m_id
) where rno=1