排除与另一行具有相似列的行



我们建议我有以下费率表:

ID   |   baseAsset  |    quoteAsset  
-------+--------------+-----------------
1   |     BTC      |      USDT         
2   |     USDT     |      BTC         
3   |     LUNA     |      ETH          
4   |     ETH      |      LUNA         
5   |     USD      |      BTC          

问题是,我不知道如何获得利率,并排除那些有反向配对的利率。例如,在我的情况下,我想得到这样的东西:

ID   |   baseAsset  |    quoteAsset  
-------+--------------+-----------------
1   |     BTC      |      USDT        
3   |     LUNA     |      ETH          
5   |     USD      |      BTC          

现在只有BTC/USDT(没有USDT/BTC(。所以,查询应该只取第一对(无论是BTC/USDTLUNA/ETH还是另一对(,并找到要排除的反向对。如果应该有额外的列(如createdAtupdatedAt(,请纠正我,如果我的问题仍然不清楚,请告诉我。

在SQL中,如果您的DBMS支持以下函数,则可以使用LEASTGREATEST

select
min(id),
least(baseAsset, quoteAsset) as asset1,
greatest(baseAsset, quoteAsset) as asset2,
from mytable
group by least(baseAsset, quoteAsset), greatest(baseAsset, quoteAsset)
order by min(id);

在标准SQL中,您可以用替换上述LEAST

CASE WHEN baseAsset < quoteAsset THEN baseAsset ELSE quoteAsset END

检测CCD_ 10以上

CASE WHEN baseAsset > quoteAsset THEN baseAsset ELSE quoteAsset END

另一种简单的方法是使用NOT EXISTS:

select *
from mytable
where not exists
(
select null
from mytable reverse
where reverse.baseAsset = mytable.quoteAsset
and reverse.quoteAsset = mytable.baseAsset
and reverse.id < mytable.id
);

最新更新