我有一个抛出级别错误的查询。它是一张有两个方向的汇率的表格。
currency_from | currency_to | convertion rate
ARS | USD | 0.20
USD | ARS | 20.00我想要一个游戏,例如,价值最高的游戏。
currency_from | currency_to | convertion rate
USD | ARS | 20.00显然,表中有许多不同货币的组合,下面的查询可以解决这个问题,但没有达到第二级。
select *
from gl.gl_daily_rates gdr
where gdr.conversion_date = to_date('20180301','YYYYMMDD')
and gdr.conversion_rate = (select max(total.conversion_rate)
from (select gdr2.conversion_rate
from gl.gl_daily_rates gdr2
where gdr2.conversion_date = gdr.conversion_date
and gdr2.from_currency = gdr.from_currency
and gdr2.to_currency = gdr.to_currency
union all
select gdr3.conversion_rate
from gl.gl_daily_rates gdr3
where gdr3.conversion_date = gdr.conversion_date
and gdr3.from_currency = gdr.to_currency
and gdr3.to_currency = gdr.from_currency
) total);有人想过如何解决这个问题吗?谢谢。
发布于 2018-09-14 13:52:20
为此,您可以使用窗口函数:
select *
from (select gdr.*,
max(conversion_rate) over (partition by least(currency_from, currency_to), greatest(currency_from, currency_to) ) as max_cr
from gl.gl_daily_rates gdr
where gdr.conversion_date = to_date('20180301','YYYYMMDD')
) gdr
where conversion_rate = max_cr;发布于 2018-09-14 16:25:15
也许我遗漏了什么,但一个简单得多的解决方案是:
SELECT *
FROM gl.gl_daily_rates gdr
WHERE gdr.conversion_date = TO_DATE ('20180301', 'YYYYMMDD')
AND conversion_rate =
(SELECT MAX (conversion_rate)
FROM gl.gl_daily_rates gdr
WHERE gdr.conversion_date = TO_DATE ('20180301', 'YYYYMMDD'));https://stackoverflow.com/questions/52333338
复制相似问题