sql - 如何根据状态或最近更新的时间戳获取记录?
问题描述
我有以下带有给定记录的车辆表。
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。
输入:
预期输出;
提前致谢。
解决方案
如果我理解正确,您可以使用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'
。
推荐阅读
- reactjs - 更好的方法来更新事件的反应组件
- jenkins - Jenkinsfile:如何为“并行”块提供功能,而不是预定义的地图?
- pyspark - 使用 pyspark 在日期范围上运行 for 循环
- python - 设置 NetworkX 边长
- android - Google Maps Android SDK - OnIndoorStateChangeListener 问题
- java - Spring Boot:使用 HandlerMethodArgumentResolver 手动绑定来自 webRequest 的对象
- r - 如何在 docker 容器中安装旧版本的 ar 包
- java - 使用 int 数组将 JSON 序列化为 Spring RequestBody
- r - 如何根据变量数(var1、var2 等)自动调整 R 脚本
- python - 在 Pandas 中平均数据框的切片