Я хочу получить максимальную, вторую максимальную и третью максимальную дату из приведенной ниже таблицы
proc SQL;
create table Kri_obs_l(
Kri_rk int,
value_dt datetime,
score int
);
insert into Kri_obs_l
values (10000, "2Jan2018"d, 12)
values (10001, "2Jan2018"d, 2)
values (10001, "29Jan2019"d, 18)
values (10002, "2Jan2018"d, 5)
values (10002, "26Jan2019"d, 18)
values (10002, "27Jan2019"d, 18)
values (10003, "2Jan2018"d, 18)
values (10003, "26Jan2019"d, 18)
values (10003, "27Jan2019"d, 18)
values (10004, "2Jan2018"d, 25)
values (10005, "2Jan2018"d, 32)
values (10005, "26Jan2019"d, 18)
values (10005, "27Jan2019"d, 18)
values (10006, "2Jan2018"d, 5)
values (10007, "2Jan2018"d, 2)
values (10008, "2Jan2018"d, 12)
values (10009, "2Jan2018"d, 18)
values (10009, "26Jan2019"d, 18)
values (10009, "27Jan2019"d, 18)
;
quit;
Мой код, чтобы получить максимальную, вторую максимальную и третью максимальную
proc sql;
create table KRI_score_max as
select Kri_rk, MAX(value_dt) as reported_dt format=date9.
from KRI_OBS_l
group by Kri_rk;
create table KRI_score_second_max as
select Kri_rk, MAX(value_dt) as reported_dt format=date9.
from KRI_OBS_l a
where value_dt = (select MAX(value_dt) from KRI_OBS_l b where value_dt< (select MAX(value_dt) from KRI_OBS_l))
group by Kri_rk;
create table KRI_score_third_max as
select Kri_rk, MAX(value_dt) as reported_dt format=date9.
from KRI_OBS_l
where value_dt < (select MAX(value_dt) from KRI_OBS_l where value_dt< (select MAX(value_dt) from KRI_OBS_l))
group by Kri_rk;
create table KRI_score_third_max as
select *
from KRI_score_third_max
where KRI_rk in (select Kri_rk from KRI_score_second_max);
quit;
получение максимальной записи работает нормально, у меня возникает проблема с получением второй максимальной и третьей максимальной записи, если я удаляю запись 29 января 2019 г. из таблицы, она работает нормально, но добавление этой записи делает 27 января 2010 г. второй максимальной записью, поэтому запрос получает этозаписать как второй макс.Я хочу получить вторую максимальную и третью максимальную записи каждой группы записей по Kri_rk.
Поскольку в proc SQL нет функции предела, я не могу использовать порядок по комбинации desc и limit.