从 2 sql 个表中获取重复记录
Getting duplicate records from 2 sql tables
我有 2 SQL 个表
Table#1
account
product
expiry-date
101
prod1
2021-01-30
102
prod2
2021-02-20
103
prod3
2021-03-09
103
prod3
2021-03-19
104
prod4
2021-03-15
105
prod5
2021-04-23
105
prod5
2021-04-24
106
prod6
2021-04-25
Table#2
account
101
106
从上面的 2 个表中,我只想从 Table1 中获取不匹配的记录,并避免重复记录。
结果:
account
product
expiry-date
102
prod2
2021-02-20
103
prod3
2021-03-09
104
prod4
2021-03-15
105
prod5
2021-04-23
下面的查询我试过了,但我得到了重复的记录,因为有效期在帐户上是唯一的。我的输出低于记录
SQL 我试过的查询:
select distinct (a.account, a.product, a.expiry-date)
from table1 a
where a.account not in (select account from table2)
结果:
account
product
expiry-date
102
prod2
2021-02-20
103
prod3
2021-03-09
103
prod3
2021-03-19
104
prod4
2021-03-15
105
prod5
2021-04-23
105
prod5
2021-04-24
您可以通过聚合使用相同的查询:
SELECT a.account
,a.product
,MIN(a.expiry) expiry
FROM table1 a
WHERE a.account NOT IN (
SELECT account
FROM table2
)
GROUP BY a.account
,a.product
你可以使用反连接然后ROW_NUMBER()
例如:
select *
from (
select a.*, row_number() over(partition by accoun order by expiry) as rn
from table1 a
left join table2 b on b.account = a.account
where b.account is null
) x
where rn = 1
我有 2 SQL 个表
Table#1
account | product | expiry-date |
---|---|---|
101 | prod1 | 2021-01-30 |
102 | prod2 | 2021-02-20 |
103 | prod3 | 2021-03-09 |
103 | prod3 | 2021-03-19 |
104 | prod4 | 2021-03-15 |
105 | prod5 | 2021-04-23 |
105 | prod5 | 2021-04-24 |
106 | prod6 | 2021-04-25 |
Table#2
account |
---|
101 |
106 |
从上面的 2 个表中,我只想从 Table1 中获取不匹配的记录,并避免重复记录。
结果:
account | product | expiry-date |
---|---|---|
102 | prod2 | 2021-02-20 |
103 | prod3 | 2021-03-09 |
104 | prod4 | 2021-03-15 |
105 | prod5 | 2021-04-23 |
下面的查询我试过了,但我得到了重复的记录,因为有效期在帐户上是唯一的。我的输出低于记录
SQL 我试过的查询:
select distinct (a.account, a.product, a.expiry-date)
from table1 a
where a.account not in (select account from table2)
结果:
account | product | expiry-date |
---|---|---|
102 | prod2 | 2021-02-20 |
103 | prod3 | 2021-03-09 |
103 | prod3 | 2021-03-19 |
104 | prod4 | 2021-03-15 |
105 | prod5 | 2021-04-23 |
105 | prod5 | 2021-04-24 |
您可以通过聚合使用相同的查询:
SELECT a.account
,a.product
,MIN(a.expiry) expiry
FROM table1 a
WHERE a.account NOT IN (
SELECT account
FROM table2
)
GROUP BY a.account
,a.product
你可以使用反连接然后ROW_NUMBER()
例如:
select *
from (
select a.*, row_number() over(partition by accoun order by expiry) as rn
from table1 a
left join table2 b on b.account = a.account
where b.account is null
) x
where rn = 1