获取ORACLE中每个号码的最新记录
Get latest records of each number in ORACLE
我在 Trans
table 中有一组数据。其中包含 transno
的几笔交易。我需要获取每个 transno
的最新交易记录。
这些数据存储在Oracle数据库中。
我试过下面的查询,每次都没有什么变化。但我只给了一个生的。此 table 包含超过 1m 的记录。
select * from (select transid,transno,transdate,transtype
from trans order by TRANSID desc) where rownum <= 1
请帮忙解决这个问题。
您需要使用 ROW_NUMBER
window 函数来获取所有 transno
的最新 transdate
select * from
(
select transid,transno,transdate,transtype,
Row_number()over(partition by transno order by transdate desc) as rn
from trans
) where RN = 1
让我知道这是否有效。
SELECT * FROM trans GROUP BY transno ORDER BY transid DESC LIMIT 1
我不是MySQL高手,所以让我知道。
此解决方案的最佳方式是@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
我在 Trans
table 中有一组数据。其中包含 transno
的几笔交易。我需要获取每个 transno
的最新交易记录。
这些数据存储在Oracle数据库中。
我试过下面的查询,每次都没有什么变化。但我只给了一个生的。此 table 包含超过 1m 的记录。
select * from (select transid,transno,transdate,transtype
from trans order by TRANSID desc) where rownum <= 1
请帮忙解决这个问题。
您需要使用 ROW_NUMBER
window 函数来获取所有 transno
transdate
select * from
(
select transid,transno,transdate,transtype,
Row_number()over(partition by transno order by transdate desc) as rn
from trans
) where RN = 1
让我知道这是否有效。
SELECT * FROM trans GROUP BY transno ORDER BY transid DESC LIMIT 1
我不是MySQL高手,所以让我知道。
此解决方案的最佳方式是@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