首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询子查询(第二级)

SQL查询子查询(第二级)
EN

Stack Overflow用户
提问于 2018-09-14 13:46:57
回答 2查看 384关注 0票数 1

我有一个抛出级别错误的查询。它是一张有两个方向的汇率的表格。

代码语言:javascript
复制
currency_from | currency_to | convertion rate
        ARS   |   USD       | 0.20
        USD   |   ARS       | 20.00

我想要一个游戏,例如,价值最高的游戏。

代码语言:javascript
复制
currency_from | currency_to | convertion rate
        USD   |   ARS       | 20.00

显然,表中有许多不同货币的组合,下面的查询可以解决这个问题,但没有达到第二级。

代码语言:javascript
复制
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);

有人想过如何解决这个问题吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-14 13:52:20

为此,您可以使用窗口函数:

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2018-09-14 16:25:15

也许我遗漏了什么,但一个简单得多的解决方案是:

代码语言:javascript
复制
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'));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52333338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档