在SQL中如何在2行6行中找到重复项?

时间:2016-04-26 13:51:36

标签: sql

Example Query

我想在附加的示例数据集上创建一个查询,该查询仅返回基于第2列和第2列的重复记录。 6.因此,对于附加的示例数据集,我希望我的结果是:

 1. 1 802733 EX02291617 1160304 633578 37.25 Y
 2. 1 802733 EX04081638 1160412 638232 37.52 Y
 3. 1 802733 EX04141602 1160422 639539 37.52 Y
 4. 1 806717 EX01111659 1160115 628215 83.9  Y
 5. 1 806717 EX02091664 1160212 631401 83.9  Y

每当我尝试使用GROUP BY函数时,它似乎只有在我使用返回数据的所有列时才有效。我希望不必这样。

3 个答案:

答案 0 :(得分:0)

Oracle数据库:

select * from <your_table> where rowid not in(select min(rowid) from <your_table> group by column_1,column2);

答案 1 :(得分:0)

使用GROUP BY和COUNT聚合函数进行自联接:

SELECT a.appco, b.appvnd, a.appin, a.appcdb, a.appck, b.apppd, a.appefb 
FROM table-name AS a
INNER JOIN (
    SELECT appvnd, apppd, COUNT(*) AS frequency
    FROM table-name
    group by appvnd, apppd
    having COUNT(*) > 1
) AS b ON a.appvnd = b.appvnd AND a.apppd = b.apppd

如果要查询查询结果,只需将table-name更改为子查询即可。例如:

SELECT a.appco, b.appvnd, a.appin, a.appcdb, a.appck, b.apppd, a.appefb 
FROM (
SELECT * FROM database-table-name WHERE appeft = true) AS a
INNER JOIN (
    SELECT subx.appvnd, subx.apppd, COUNT(subx.*) AS frequency
    FROM (SELECT * FROM database-table-name WHERE appeft = true) AS subx
    group by subx.appvnd, subx.apppd
    having COUNT(subx*) > 1
) AS b ON a.appvnd = b.appvnd AND a.apppd = b.apppd

答案 2 :(得分:0)

SELECT * FROM Table_Name REREID IN(                 SELECT MAX(ROWID)FROM Table_Name                 GROUP BY 2ndColumn_Name,6thColumn_Name                 ); 内部查询首先执行:它将仅选择由2ndColumn_Name&amp;组成的每个组中的最大ROWID。 6thColumn_Name结合。

外部查询执行下一步:它将显示所有不同的记录。

如果你想查看所有重复的记录,那么在外部查询中使用&#34; NOT IN&#34;而不是&#34; IN&#34;操作

ROWID对于插入数据库的每个记录都是唯一的,即由数据库本身在内部提供。