如何从表中获取最后一行,但需要该行的所有信息?

有这样的oracle表(此表是复杂的联接查询的结果)

objectId                              xml     DATETIME                    sourceId
7d2a2d8e-ec89-4579-a77e-e3e07414029c  ...     2019-11-28 10:40:34.659     1-FR
6c4476ab-637f-43e8-b162-e215c6d99758  ...     2019-11-28 10:40:34.718     1-I1
4b626ed7-fd66-46e3-98b4-e235c029f92f  ...     2019-11-28 10:40:51.477     1-FR
8d4633c7-5422-46c9-a653-632bed534b60  ...     2019-11-28 10:40:51.505     1-I1

表名是PORT

那么,如何创建DATATIMECALC行仅获取最后一条的查询?

预期结果是

objectId                              xml     DATETIME                    sourceId
4b626ed7-fd66-46e3-98b4-e235c029f92f  ...     2019-11-28 10:40:51.477     1-FR
8d4633c7-5422-46c9-a653-632bed534b60  ...     2019-11-28 10:40:51.505     1-I1
zylan131415 回答:如何从表中获取最后一行,但需要该行的所有信息?

您可以使用row_number()

select a.* from 
(
select *,row_number() over(PARTITION by sourceId order by datetime desc) rn
from t
) a where a.rn=1
,

我知道您想要每sourceId的最后一行,记录由datetime排序。我希望在Oracle中非常有效的一种方法是使用相关的子查询进行过滤:

select p.*
from port p
where p.datetime = (
    select max(p1.datetime)
    from port p1
    where p1.sourceId = p.sourceId
)

为了提高性能,您希望在(sourceId,datetime)上建立索引。

,

请在下面的查询中使用..

SELECT x.*
FROM (
    SELECT *,ROW_NUMBER() OVER (
            PARTITION BY sourceId ORDER BY DATETIME DESC
            ) row_num
    FROM y
    ) x
WHERE x.row_num = 1
本文链接:https://www.f2er.com/3015926.html

大家都在问