假设表结构是:考试记录(学员姓名,考试日期(无重复),考试结果)
查出每个考生的上次考试时间、最新考试时间、最新考试结果
select c.学员姓名,d.t as 上次考试时间,c.t as 最新考试时间,
c.r as 最新考试结果 from
(select 学员姓名,max(考试日期) as t,max(考试结果) as r from
考试记录 group by 学员姓名) c left join
(select a.学员姓名,max(a.考试日期) as t from
考试记录 a left join
(select 学员姓名,max(考试日期) as t from 考试记录 group by 学员姓名) b
on a.学员姓名=b.学员姓名 where a.考试日期on c.学员姓名=d.学员姓名;
测试结果如图
-- 设你的考试表名为YourTable,则SQL语句写法如下:
SELECT t.Name as '学员姓名',t.ExamDate as '上次考试日期'
,t2.ExamDate as '最新考试日期',t2.Result as '考试结果'
,(CASE WHEN t.ExamDate=t2.ExamDate THEN '首次预约科目二\科目三' ELSE ''END) as'预约情况'
FROM(
SELECT *FROM (
SELECT *,RANK() OVER(PARTITION BY Name ORDER BY ExamDate ASC) as rn FROM YourTable
)as ft WHERE rn=1
)t
LEFT OUTER JOIN
(
SELECT *FROM (
SELECT *,RANK() OVER(PARTITION BY Name ORDER BY ExamDate DESC) as rn FROM YourTable
)as ft WHERE rn=1
)t2 ON t.Name=t2.Name