SQL:select 唯一行

SQL: select unique rows

这是一个 table 的“玩具”示例,它有许多列和数千行的数百个。

我希望 过滤掉 任何包含相同 AcctNo、CustomerName 和 CustomerContact 的行,但保留 ONE 重复项的 ID(这样我以后就可以访问记录了)。

问:SQL 我需要什么才能完成此任务?

select MAX(ID) as KeepID,AcctNo,CustomerName,CustomerContact 
from test
GROUP BY AcctNo,CustomerName,CustomerContact

所以基本上您想要的是,按 AcctNo、CustomerName 和 CustomerContact 划分您的 table。问题中不清楚您希望如何 select 您需要保留哪个 ID,但为此您需要修改以下查询。但这应该给你一个起点。

SELECT * 
FROM   test 
       JOIN (SELECT id, 
                    Row_number() 
                      OVER ( 
                        partition BY acctno, customername, customercontact) rn 
             FROM   test) A 
         ON test.id = A.id 
WHERE  A.rn = 1 

这应该 return 像这样:

ID AcctNo CustomerName CustomerContact id rn
1 11111 Acme Foods John Smith 1 1
3 11111 Acme Foods Judy Lawson 3 1
4 22222 Yoyodyne Inc. Thomas Pynchon 4 1

这基本上是先根据分区标准计算行数,然后每个分区只选择一行。