2017-05-12 1 views
1

オラクル:各観測の最大値、および最大値に関連付けられたすべての行私はそうのようなものに見えるテーブル持っ

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との最大トランザクションIDを取得したいと思いをすべて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 

任意の考えやヘルプをいただければ幸いです。私はこれに多大な時間を費やしており、現時点では、セット全体とそれに対応するCustomerID、ReceiptLines、およびValuesの最大TransactionIDを返す点にありますが、それがすべて戻ります。

おかげ

+0

に直面している場合には、私に教えてください

SELECT CustomerId, MAX(TransactionID) AS TransactionID , ReceiptLine, Value FROM TABLE T1 GROUP BY CustomerId, ReceiptLine, Value; 

OR

SELECT T1.CustomerId, T2.TransactionID, T1.ReceiptLine, T1,Value FROM TABLE T1 INNER JOIN (SELECT MAX(TransactionID) AS TransactionID FROM TABLE GROUP BY CustomerId, ReceiptLine) T2 ON (T1.CustomerId = T2.CustomerId) FROM TABLE T1 GROUP BY CustomerId, ReceiptLine, Value; 

を問い合わせます結果セットのレコード?期待される成果の背景にある論理は何ですか? –

+0

@TimBiegeleisen私はすべてのCustomerIdと(max)TransactionIDに対応するReceiptLine値とValue値が必要です。 –

+0

そして、なぜあなたの期待される出力にレシート行「A」のトランザクション「200」が表示されないのですか? –

答えて

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

RextesterでOracleを使用するのは怖いので、デモはSQL Serverにありますが、コードは問題なくOracleでも実行する必要があることに注意してください。あなたは以下を使用することができます

+0

ご協力いただきありがとうございます。 –

0


は、トランザクションIDは `行う200`と` 2を持っている305`なぜあなたはすべての問題

関連する問題