我在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也可以用来实现结果。但是我是这个行业的新手,我不知道该怎么做。
答案 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