oracle 表同一列只取最新一条数据写法
在Oracle中,如果你想要从一个表中只取最新的一条数据,通常的方法是使用子查询或者窗口函数(ROW\_NUMBER()、ROWNUM)。以下是使用窗口函数的一个例子:
假设你有一个表your_table
,它有一个时间戳列timestamp_column
,你想要基于这个时间戳来获取每个实体的最新记录。
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY entity_id ORDER BY timestamp_column DESC) rn
FROM your_table
)
WHERE rn = 1;
在这个查询中,PARTITION BY entity_id
表示基于entity_id
进行分组,ORDER BY timestamp_column DESC
表示在每个分组内按照timestamp_column
降序排列,确保最新的记录获得rn = 1
的排名。外层查询通过rn = 1
筛选出每个分组中排名为1的记录,即最新的记录。
如果你想要使用子查询,可以这样写:
SELECT yt.*
FROM your_table yt
WHERE yt.timestamp_column = (
SELECT MAX(yt2.timestamp_column)
FROM your_table yt2
WHERE yt2.entity_id = yt.entity_id
);
这个查询通过子查询找出每个entity_id
对应的最新时间戳,然后外层查询选择与这些时间戳匹配的记录。
评论已关闭