declare @TestTable
as table
(stu_id int,
meet_doc_id char(4),
doc_name char(2),
stu_name varchar(3),
dob date,
value varchar(5),
date_meet_doc date)
insert into @TestTable
(stu_id,meet_doc_id,doc_name,stu_name,dob,value,date_meet_doc)
values
(101,'0104','AD','AM', '19500615','LDMO' ,'2011-02-15'),
(101,'0105','AD','AM', '19500615','CLEAR','2011-02-18'),
(101,'0106','AD','AM', '19500615','CLEAR','2011-02-25'),
(102,'0107','AD','AK', '19870812','CLEAR','2011-03-28'),
(102,'0108','AD','AK', '19870812','LDMO' ,'2011-04-29'),
(103,'0109','PK','LMP','19700713','CLEAR','2011-03-28'),
(103,'0110','PK','LMP','19700713','CLEAR','2011-05-12');
WITH CTE_1 (stu_id
,meet_doc_id
,doc_name
,stu_name
,dob
,done
,date_meet_doc)
AS
(SELECT stu_id
,meet_doc_id
,doc_name
,stu_name
,dob
,value
,date_meet_doc
FROM @TestTable
),
CTE_2 as(
SELECT *,row_number() over (partition by stu_id order by case when done in ('LDMO','LDM1') then 0 else 1 end, date_meet_doc desc) rn FROM CTE_1)
select stu_id
,meet_doc_id
,doc_name
,stu_name
,dob
,value
,date_meet_doc
from CTE_2 where rn=1
;
Спасибо тем, кто пытался понять, но сдался, потому что я не мог этого объяснить.
Еще раз спасибо, ребята:)