2016-10-20 2 views
4

데이터 세트는 Trans 테이블에 있습니다. 여기에는 transno의 여러 거래가 포함됩니다. 각 transno의 최신 거래 내역을 받아야합니다. 이러한 데이터는 Oracle 데이터베이스에 저장됩니다.오라클의 각 번호에 대한 최신 기록 얻기

enter image description here

나는 모든 시간에 몇 가지 변화, 쿼리 아래에 노력했다. 그러나 나는 단 하나의 생을 준다. 이 테이블은 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

고맙습니다 verymuch. 귀하의 쿼리에서 정확한 결과를 얻었습니다. – 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