如何在sql中找到具有子状态的sid?
我有一个包含以下列的表:如何在sql中找到具有子状态的sid?,sql,Sql,我有一个包含以下列的表:id、sid、subcode、subStatus Sid代表学生id。我希望学生具有finalStaus。Finalstatus基于该Sid的最后一个子代码 在第一种情况下,sid为5,最终状态为Fail。这里的最后一个子代码为4 在第二种情况下,sid是3,finalstaus是promo 子代码可以是1,2,3,4 Id SId SubCode SubStatus 1 5 4 Fail 2 5 3
id、sid、subcode、subStatus
Sid
代表学生id。我希望学生具有finalStaus。Finalstatus
基于该Sid的最后一个子代码
在第一种情况下,sid为5,最终状态为Fail。这里的最后一个子代码为4
在第二种情况下,sid是3,finalstaus是promo
子代码可以是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?如果您使用的是
sql Server
,则应使用Row\u 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
选中此处在大多数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
内部查询为每个学生选择子代码最高的行。然后,主查询将其与原始表连接起来,以检索相应的子状态。您使用的是哪个DBMS?博士后?Oracle?不仅SQL Server支持窗口函数(正如SQL标准中所命名的那样)。Postgres、Oracle、DB2、Informix和Teradata也支持它们(仅举几个例子),非常感谢你们,我也希望你们支持它们。