2016-10-20 11 views
4

私はTransテーブルのデータセットを持っています。これにはtransnoのいくつかの取引が含まれています。私はそれぞれtransnoの最新の取引記録を取得する必要があります。 これらのデータはOracleデータベースに格納されています。ORACLEの各番号の最新レコードを取得

enter image description here

私はすべての時間のいくつかの変更で、クエリの下に試してみました。しかし、私は生のものは1つしか与えません。この表には1mを超えるレコードが含まれています。

select * from (select transid,transno,transdate,transtype from trans order by TRANSID desc) where rownum <= 1

これを助けてください。

答えて

3

すべてtransno

select * from 
(
select transid,transno,transdate,transtype, 
Row_number()over(partition by transno order by transdate desc) as rn 
from trans 
) where RN = 1 
+0

ありがとうございます。私はあなたの質問から正確な出力を得ました。 – UUU

0

の最新transdateはこれが動作するかどうか私に教えてもらうためにROW_NUMBERウィンドウ関数を使用する必要があります。

SELECT * FROM trans GROUP BY transno ORDER BY transid DESC LIMIT 1 

私はMySQLのマスターではありません。私に知らせてください。

+0

こんにちは、ありがとう。しかし、望ましい出力を得られなかった。返されるエラーはほとんどありません。 Prdpの答えは正しい出力を与えています。完了するまでにもっと時間がかかりました。 – UUU

0

このソリューションの最善の方法は@ Prdpの方法です。しかし、別の方法もあります。 inline viewは次のように使用できます。

select * from 
trans t 
inner join 
(
    select transno, max(transdatetime) maxtransdatetime from trans group by transno 
) s 
on s.transno = t.transno and s.maxtransdatetime = t.transdatetime 
+0

ここにはJOINはありません。 – PHPglue

+0

@PHPglue、私は知っている、私はこの方法が最高ではないことに気づいたが、これは問題の別の解決策である。 –

+0

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

関連する問題