Как получить записи на основе статуса или недавно обновленной отметки времени? - PullRequest
1 голос
/ 06 апреля 2020

У меня есть следующая таблица транспортных средств с заданными записями.

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 для этого CAR_TYPE.

INPUT:

INPUT

Ожидаемый ВЫХОД;

Output

Заранее спасибо.

1 Ответ

0 голосов
/ 06 апреля 2020

Если я правильно понимаю, вы можете использовать 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). Эта строка является либо самой последней строкой с 'Y', либо, если нет 'Y' s, то самой последней с 'N'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...