34,575
社区成员
发帖
与我相关
我的任务
分享
SELECT t.姓名,t.科目,t.日期,t.成绩 FROM (
SELECT *,ROW_NUMBER()OVER(PARTITION BY 姓名,科目 ORDER BY 日期 DESC) rn from tb1
)t WHERE rn=1
;
with list as(
select 姓名='张三',科目='语文',日期=20190401,成绩= 90 union all
select 姓名='张三',科目='语文',日期=20190420,成绩= 95 union all
select 姓名='张三',科目='数学',日期=20190501,成绩= 95 union all
select 姓名='张三',科目='数学',日期=20190520,成绩= 97 union all
select 姓名='李四',科目='语文',日期=20190410,成绩= 85 union all
select 姓名='李四',科目='语文',日期=20190520,成绩= 90
),datalist as(
select *,rid=ROW_NUMBER()over(partition by 姓名,科目 order by 日期 desc)
from list
)
select 姓名,科目,日期,成绩
from datalist
where rid=1
/*
姓名 科目 日期 成绩
---- ---- ----------- -----------
李四 语文 20190520 90
张三 数学 20190520 97
张三 语文 20190420 95
(3 行受影响)
*/