我有一个包含以下列的表:id, sid, subcode, subStatus
Sid
代表学生ID。我希望finalStaus.Finalstatus
的学生基于该sid的最后一个子代码。
在第一种情况下,sid为5,Finalstatus为Fail.Here lastsubcode为4.
在第二种情况下,sid是3,finalstaus是promo.Here lastsubcode是3。
子代码可以是1,2,3,4 .....
Id SId SubCode SubStatus
1 5 4 Fail
2 5 3 pass
3 5 2 pass
4 5 1 fail
5 3 3 promo
7 3 2 promo
8 3 1 pass
如何在sql中找出带有子状态的sid?
答案 0 :(得分:1)
如果您使用Sql Server
,则应使用Row_number()
排名功能:
with CTE as
( Select sid,
ROW_NUMBER() OVER(PARTITION BY sid ORDER BY subcode DESC) AS lastsubcoderow,
subStatus
From Student
)
Select sid ,subStatus from CTE
where lastsubcoderow = 1
点击此处DEMO
答案 1 :(得分:1)
这应该在大多数RDBMS中做你想要的:
SELECT t.sid, t.substatus
FROM table t
JOIN (
SELECT i.sid, MAX(i.subcode) AS max_subcode
FROM table i
GROUP BY i.sid
) m ON m.sid=t.sid AND m.max_subcod=t.subcode
内部查询为每个学生选择具有最高子代码的行。然后,主查询将其与原始表连接以检索相应的子状态。