首页 > 解决方案 > 时间戳数据类型上的 Oracle max 函数

问题描述

我想从 oracle 中的时间戳数据类型中获取最大日期

我的数据看起来像这样

id  updated_date
--  -------------------
1   2011-12-21 10:34:24 
1   2011-12-21 09:52:15
1   2011-12-21 10:02:49

由于所有日期都相同但时间戳不同,因此 max 函数将所有 3 行改为我想查看每个 ID 的最新时间戳的最大日期,如下所示

Select MAX(updated_date) update_date, id FROM id_table group by id;
id  updated_date
--  -------------------
1   2011-12-21 10:34:24 

提前致谢

该表为 10000 多行,数据如下所示

 id  updated_date
 --  -------------------
 1   2011-12-21 10:34:24 
 1   2011-12-21 09:52:15
 1   2011-12-21 10:02:49
 2   2011-13-21 10:34:24 
 2   2011-13-21 09:52:15
 2   2011-13-21 10:02:49
 3   2011-14-21 10:34:24 
 3   2011-14-21 09:52:15
 3   2011-14-21 10:02:49

在选择时,我希望看到每个 id 有 1 行,没有重复 Select MAX(updated_date) update_date, id FROM id_table group by id;

id  updated_date
 --  -------------------
 1   2011-12-21 10:34:24 
 2   2011-13-21 10:34:24 
 3   2011-14-21 10:34:24 

标签: sqloracletimestamp

解决方案


您可以使用FIRST聚合函数或row_number().

1.

SELECT MAX(id) KEEP(DENSE_RANK FIRST ORDER BY updated_date DESC) AS id,
       MAX(updated_date) update_date
FROM id_table;

2.

SELECT id,
       updated_date
FROM (
     SELECT i.*,
            ROW_NUMBER() OVER(
                 ORDER BY updated_date DESC
            ) AS rn
     FROM id_table i
)
WHERE rn = 1;

演示

奖励(适用于 Oracle 12c 及更高版本):

select * from id_table 
ORDER BY updated_date DESC FETCH FIRST 1 ROWS ONLY

推荐阅读