如何从oracle中的联接查询中删除重复的行?

问题描述 投票:0回答:2

我有两个表bc_transactions和bc_messages。我使用下面的查询来连接这两个表

SELECT distinct(bt.USER_TRANS_ID),bm.TS,bm.STATUS
FROM bc_transactions bt
inner JOIN bc_messages bm
ON bt.USER_TRANS_ID=bm.USER_MESSAGE_ID
where bt.protocol_name  = 'Gateway'
and bt.STATUS=bm.STATUS
AND bt.startdate >=TRUNC(SYSDATE-2)
AND bt.startdate <=TRUNC(SYSDATE-1)
AND bt.STATUS like 'ERROR TRANSPORT'
AND bt.HOSTNAME='HEB'
order by bt.USER_TRANS_ID ASC;

bc_messages表具有状态为ERROR TRANSPORT的多行,这些行在不同的时间戳记(bm.TS)具有相同的USER_MESSAGE_ID。我正在尝试仅获取最新行。

|USER_TRANS_ID |            TS        |   STATUS            |
-------------------------------------------------------------
| ID1          | 10-03-2020  15:01:23 |   ERROR TRANSPORT   |
| ID1          | 10-03-2020  15:15:23 |   ERROR TRANSPORT   |
| ID1          | 10-03-2020  15:30:23 |   ERROR TRANSPORT   |
| ID1          | 10-03-2020  15:35:23 |   ERROR TRANSPORT   |
| ID2          | 10-03-2020  16:10:23 |   ERROR TRANSPORT   |
| ID2          | 10-03-2020  16:11:23 |   ERROR TRANSPORT   |
sql oracle outer-join
2个回答
1
投票
select t.* from (select bt.USER_TRANS_ID, bm.TS,bm.STATUS, row_number() over (partition by bt.USER_TRANS_ID order by bm.TS desc) as seq from bc_transactions bt inner join bc_messages bm on bt.USER_TRANS_ID = bm.USER_MESSAGE_ID where bt.protocol_name = 'Gateway' and bt.STATUS=bm.STATUS and bt.startdate >= TRUNC(SYSDATE-2) and bt.startdate <= TRUNC(SYSDATE-1) and bt.STATUS like 'ERROR TRANSPORT' and bt.HOSTNAME = 'HEB' ) t where seq = 1;

1
投票
SELECT USER_TRANS_ID, TS, STATUS FROM (SELECT bt.USER_TRANS_ID,bm.TS,bm.STATUS, ROW_NUMBER() OVER (PARTITION BY bt.USER_TRANS_ID , bm.STATUS ORDER BY bm.TS DESC NULLS LAST) AS RN -- added this FROM bc_transactions bt inner JOIN bc_messages bm ON bt.USER_TRANS_ID=bm.USER_MESSAGE_ID where bt.protocol_name = 'Gateway' and bt.STATUS=bm.STATUS AND bt.startdate >=TRUNC(SYSDATE-2) AND bt.startdate <=TRUNC(SYSDATE-1) AND bt.STATUS like 'ERROR TRANSPORT' AND bt.HOSTNAME='HEB') WHERE RN = 1 -- added this order by bt.USER_TRANS_ID ASC;

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.