如何根据状态或最近更新的时间戳获取记录?
How to get records based on status or recent updated timestamp?
我有以下车辆 table 并具有给定的记录。
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.If 任何 CAR_TYPE' s CAR_STATUS='N' 然后获取那个 CAR_TYPE.
最近更新的 CAR
输入:
预期输出;
提前致谢。
如果我没理解错的话,你可以用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;
这 returns 每个 car_type
一行(基于 partition by
子句)。该行是带有 'Y'
的最新行,或者如果没有 'Y'
,则为带有 'N'
.
的最新行
我有以下车辆 table 并具有给定的记录。
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.If 任何 CAR_TYPE' s CAR_STATUS='N' 然后获取那个 CAR_TYPE.
最近更新的 CAR输入:
预期输出;
提前致谢。
如果我没理解错的话,你可以用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;
这 returns 每个 car_type
一行(基于 partition by
子句)。该行是带有 'Y'
的最新行,或者如果没有 'Y'
,则为带有 'N'
.