Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql中找到具有子状态的sid?_Sql - Fatal编程技术网

如何在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也支持它们(仅举几个例子),非常感谢你们,我也希望你们支持它们。