我有一张看起来像这样的表:
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,但是那个它还没有回来。
由于
答案 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
<强>输出:强>
在这里演示:
请注意,演示在SQL Server中,因为在Rextester上使用Oracle是可怕的,但代码也应该在Oracle上运行而没有任何问题。