讓我們建議我有下表的費率:
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/USDT、 或LUNA/ETH或另一對)并找到要排除的反向對。如果應該有額外的專欄(如createdAt或updatedAt) - 請糾正我,如果我的問題仍然不清楚,請告訴我。
PS 純 SQL 語言的答案也被接受。
uj5u.com熱心網友回復:
如果您的 DBMS 支持以下功能,您將在 SQL 中使用LEAST并GREATEST為此目的:
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
以上GREATEST通過
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
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399480.html
上一篇:如何在COUNT(column)查詢中計算NULL?
下一篇:MySQL按列名替換表中的值
