首页 > 解决方案 > 如何根据状态或最近更新的时间戳获取记录?

问题描述

我有以下带有给定记录的车辆表。

Create Table Vehicle (Vehicle_Type varchar(50),Car_Number number,Car_Type varchar(10),Car_Status char(1),Car_Repaired_Date Date);
Insert into Vehicle(Vehicle_Type,Car_Number,Car_Type,Car_Status,Car_Repaired_Date)values('CAR',123456,'SUV','Y','16-MAR-20 06.49.05');
Insert into Vehicle(Vehicle_Type,Car_Number,Car_Type,Car_Status,Car_Repaired_Date)values('CAR',234567,'SUV','N','16-MAR-20 06.49.05');
Insert into Vehicle(Vehicle_Type,Car_Number,Car_Type,Car_Status,Car_Repaired_Date)values('CAR',334567,'SEDAN','N','16-MAR-20 06.49.05');
Insert into Vehicle(Vehicle_Type,Car_Number,Car_Type,Car_Status,Car_Repaired_Date)values('CAR',4567890,'SEDAN','N','14-MAR-20 06.49.05');
commit;

我正在尝试获取 Vehicle_Type='CAR' 的记录,其中 CAR_STATUS='Y' 具有不同的 CAR_TYPE。如果任何 CAR_TYPE 的 CAR_STATUS='N' 则获取该 CAR_TYPE 最近更新的 CAR。

输入:

输入

预期输出;

输出

提前致谢。

标签: sqloracleoracle11g

解决方案


如果我理解正确,您可以使用row_number()

select v.*
from (select v.*,
             row_number() over (partition by car_type
                                order by car_status desc,   -- 'Y' before 'N'
                                         car_repaired_date desc
                               ) as seqnum
      from vehicle v
      where vehicle_type = 'CAR'
     ) v
where seqnum = 1;

这将返回一行car_type(基于partition by子句)。该行是带有 a 的最新行,'Y'或者如果没有'Y's,那么是带有 a 的最新行'N'


推荐阅读