首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -返回每个字段的前3个记录

SQL -返回每个字段的前3个记录
EN

Stack Overflow用户
提问于 2011-04-07 08:32:44
回答 1查看 406关注 0票数 0

我有以下数据子集:

代码语言:javascript
复制
Ticker A | Ticker B | Value 1 | Value 2
AAU        AAV        -0.49     0.98
AAU        AAWW       -0.68    -0.34
AAU        AAXJ       -0.82     0.54
AAU        AB         -0.49    -0.98
AAV        AAWW        0.74    -0.52
AAV        AAXJ        0.69     0.36
AAV        AB          0.27    -1.00
AAWW       AAXJ        0.89     0.61
AAWW       AB          0.62     0.54
AAXJ       AB          0.54    -0.34

使用MySQL时,我需要根据滚动条返回'Value 1‘和'Value 2’中的前3个(最大值)。例如,我想要找到3个最大的'Value 1‘和'Value 2’,其中滚动条是'AAWW‘(它可以存在于ticker A或Ticker B列中),但我希望看到与其关联的另一个滚动条,每个值。基于上面的数据和那个场景,我想要的记录集是:

代码语言:javascript
复制
Ticker | Value 1 | Ticker | Value 2
AAV      0.89      AAXJ     0.61
AAXJ     0.72      AB       0.54
AB       0.62      AAU     -0.34 

理想情况下,我希望在不使用存储过程的情况下完成此操作。这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-07 08:48:36

尝试这样做(假设您没有ID列,否则将@rownum/rank替换为ID):

代码语言:javascript
复制
SELECT T1.SUB_Ticker, T1.VALUE1, T2.SUB_Ticker, T2.VALUE2
  FROM
(SELECT CASE WHEN TickerA = 'AAWW' THEN TickerA ELSE TickerB END Ticker,
        CASE WHEN TickerA = 'AAWW' THEN TickerB ELSE TickerA END SUB_Ticker,
        VALUE1,
        @rownum:=@rownum+1 ‘rank’
  FROM data_table d, (SELECT @rownum:=0) r
 WHERE TickerA = 'AAWW' OR TickerB = 'AAWW'
 ORDER BY VALUE1 DESC
 LIMIT 3) T1
JOIN
(SELECT CASE WHEN TickerA = 'AAWW' THEN TickerA ELSE TickerB END Ticker,
        CASE WHEN TickerA = 'AAWW' THEN TickerB ELSE TickerA END SUB_Ticker,
        VALUE2,
        @rownum:=@rownum+1 ‘rank’
  FROM data_table d, (SELECT @rownum:=0) r
 WHERE TickerA = 'AAWW' OR TickerB = 'AAWW'
 ORDER BY VALUE2 DESC
 LIMIT 3) T2 ON T1.rank = T2.rank
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5574535

复制
相关文章

相似问题

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