从每个目标的一组日期中获取last_modified_date

时间:2018-10-09 06:22:43

标签: sql database oracle

我在oracle数据库中有一个表:

 Transaction_ID  Target     Status  Last_modified_date

   80913570      8536349      1     2018-10-03 03:40:36.0
   80913540      8860342      1     2018-09-28 08:45:32.0
   80913541      9135368      1     2018-09-28 08:45:42.0
   80913532      8860342      1     2018-09-28 08:12:52.0
   80913624      9256309      1     2018-10-05 01:25:06.0
   80913573      9256309      0     2018-10-03 07:18:35.0
   80913574      9256309      0     2018-10-03 07:21:26.0
   80913576      9256309      1     2018-10-03 07:28:36.0
   80913613      5429179      0     2018-10-08 05:45:00.0
   80913614      5429179      1     2018-10-04 06:48:06.0

在此表中,我希望所有 Target 的最近修改日期。由于某些目标具有单个记录,而另一些具有多个修改日期。

我尝试了以下查询:

select max(last_modified_date) from demoTable where target in (select distinct target from demoTable);

但是,由于情况特殊,我只希望在所有目标中获得一个值。

* PL / SQL也可以用来实现结果。但是我是这个行业的新手,我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

使用分组依据

select target,max(last_modified_date) from demoTable 
group by target

答案 1 :(得分:1)

使用相关的子查询,因为您需要每个目标最近的日期,所以您可以从下面两个中选择任何一种方法

select t.* from demoTable t     
where t.Last_modified_date in
   ( select max(Last_modified_date) from demoTable t1
           where t1.Target=t.Target
   )

或使用row_number窗口功能

select  Transaction_ID ,Target , Status, Last_modified_date from
(
 select Transaction_ID ,Target , Status, Last_modified_date , row_number() over(partition by target order by Last_modified_date desc) as rn from demoTable
) t where t.rn=1