如何在sql中找出带有子状态的sid?

时间:2014-06-04 06:03:41

标签: sql

我有一个包含以下列的表: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?

2 个答案:

答案 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

内部查询为每个学生选择具有最高子代码的行。然后,主查询将其与原始表连接以检索相应的子状态。