SQL Server:条件子查询?
我在一个表上设计一个查询,但是当我必须根据子查询的结果有条件地获取不同的信息时,我几乎被卡住了 所有这些都是关于一个名为UUTResults的表,我在其中存储系统上测试的每个UUT(测试单元)的信息。UUTresults表的相关字段为:SQL Server:条件子查询?,sql,sql-server,Sql,Sql Server,我在一个表上设计一个查询,但是当我必须根据子查询的结果有条件地获取不同的信息时,我几乎被卡住了 所有这些都是关于一个名为UUTResults的表,我在其中存储系统上测试的每个UUT(测试单元)的信息。UUTresults表的相关字段为: UUTresultsId(主密钥) 序列号(被测装置序列号) 状态ID(测试结果)。它可以是1(通过)、2(失败)、3(错误)、4(中止) 有些受测试单元测试不止一次,每次重新测试可能会有不同的结果。示例: 10个不同的序列号 6个系列测试一次=UUTResul
UUTresultsId(主密钥)
序列号(被测装置序列号)
状态ID(测试结果)。它可以是1(通过)、2(失败)、3(错误)、4(中止)
有些受测试单元测试不止一次,每次重新测试可能会有不同的结果。示例:
10个不同的序列号
6个系列测试一次=UUTResults表中的6个条目
4个不同的序列测试三次=UUTResults表中的12个条目
UUTResults表中总共有18个条目
下面是表中可能记录的简化示例:
UUTresultsId SerialNumber StatusId
1 1 1
2 1 2
3 2 1
4 1 3
5 2 1
... ... ...
18 10 2
目标:
我需要根据以下规则获取SerialNumber和结果:
有人喜欢测验吗?我希望如此:)
谢谢大家! 如果需要对每个通过或失败的
SerialNumber
进行最后一次测试,可以使用筛选和窗口功能:
select r.*
from (select r.*,
row_number() over (partition by SerialNumber order by UUTresultsId desc) as seqnum
from UUTresults r
where statusid in (1, 2)
) r
where seqnum = 1;
注意:这假设
UUTresultsId
是一个单调递增的id,用于确定“最新”。您没有日期/时间,因此这似乎是一个合理的假设。不要发布代码的图像。代码是文本,将其发布为text
。此外,除了“有人喜欢测验吗?”之外,你在这里问我们什么?对不起……下次我会做得更好。在目标中,我定义了我需要什么。根据规则,我需要多次测试UUT的序列号和测试状态:对于每个不同的序列号只考虑最后TEEST,如果结果与通过或失败不同,则需要考虑该序列号之前记录的结果。谢谢哇,非常感谢。现在我尝试一下…并研究它(老实说,我不知道“row_number()”和“Partition by”。是的,你是对的。PK每增加一个tiem我就添加一个新的DUT测试。时间和日期列也存在,但PK看起来更简单。非常感谢!@DavidePorro,请将其标记为答案,它有助于解决你的问题…无言。它看起来正在工作…我只需要进入这个查询并了解它是如何工作的。我真的感谢你ou Gordon…今天我学到了一些新东西(尽管我五十多岁了,但我不是SQL专家)。您好!