Oracle:每个观察的最大值,以及与最大值关联的所有行

时间:2017-05-12 05:16:22

标签: sql oracle greatest-n-per-group

我有一张看起来像这样的表:

CustomerId  TransactionID  ReceiptLine  Value
100         200               A          .90
100         200               B          .95
100         201               A          1.06
101         199               A          1.00
101         200               B          .99  
101         200               ZZ         1.02
102         300               R          1.00
102         305               R          1.00
102         305               T          1.03
...

我想获得每个CustomerId的最大TransactionID以及与TransactionID关联的TransactionID右侧的所有列。

所以基于我所描述的规范的假设查询会返回:

CustomerId  TransactionID  ReceiptLine  Value
100         201               A          1.06
101         200               B          .99  
101         200               ZZ         1.02
102         305               R          1.00
102         305               T          1.03

任何想法或帮助将不胜感激。我花了很多时间在这一点上,目前我已经回到了整个集合的最大TransactionID及其相应的CustomerID,ReceiptLines和Values,但是那个它还没有回来。

由于

1 个答案:

答案 0 :(得分:2)

尝试以下查询:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT CustomerID, TransactionID,
           ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY Value DESC) rn
    FROM yourTable
) t2
    ON t1.CustomerId    = t2.CustomerId    AND
       t1.TransactionID = t2.TransactionID AND
       t2.rn = 1
ORDER BY t1.CustomerId

<强>输出:

enter image description here

在这里演示:

Rextester

请注意,演示在SQL Server中,因为在Rextester上使用Oracle是可怕的,但代码也应该在Oracle上运行而没有任何问题。