SQL:select 唯一行
SQL: select unique rows
这是一个 table 的“玩具”示例,它有许多列和数千行的数百个。
我希望 过滤掉 任何包含相同 AcctNo、CustomerName 和 CustomerContact 的行,但保留 ONE 重复项的 ID(这样我以后就可以访问记录了)。
示例:
ID AcctNo CustomerName CustomerContact
1 1111 Acme Foods John Smith
2 1111 Acme Foods John Smith
3 1111 Acme Foods Judy Lawson
4 2222 YoyoDyne Inc Thomas Pynchon
5 2222 YoyoDyne Inc Thomas Pynchon
<= I want to save IDs 2, 3, and 5
Fiddle:
https://www.db-fiddle.com/f/bEECHi6XnvKAeXC4Xthrrr/1
问: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
这基本上是先根据分区标准计算行数,然后每个分区只选择一行。
这是一个 table 的“玩具”示例,它有许多列和数千行的数百个。
我希望 过滤掉 任何包含相同 AcctNo、CustomerName 和 CustomerContact 的行,但保留 ONE 重复项的 ID(这样我以后就可以访问记录了)。
示例:
ID AcctNo CustomerName CustomerContact 1 1111 Acme Foods John Smith 2 1111 Acme Foods John Smith 3 1111 Acme Foods Judy Lawson 4 2222 YoyoDyne Inc Thomas Pynchon 5 2222 YoyoDyne Inc Thomas Pynchon <= I want to save IDs 2, 3, and 5
Fiddle: https://www.db-fiddle.com/f/bEECHi6XnvKAeXC4Xthrrr/1
问: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 |
这基本上是先根据分区标准计算行数,然后每个分区只选择一行。