首页 > 解决方案 > 如何从表中选择最近的 8 行以获得表中的唯一序列号

问题描述

我使用 labview 制作了自动化测试 GUI,用于测试我们的 8 通道设备。每次测试完成时,SQL Server 表中会自动添加 8 行,并且所有这 8 行都记录了相同的序列号。每完成一次测试,不管这个序列号是否已经测试过,都会增加8行。我想要做的是获取所有唯一序列号的最新数据(总是 8 行)。

到目前为止,我只能使用以下代码对单行输入测试执行此操作:

 SELECT TestIndex 
 FROM dbo.TROSA_101_InitialTestingLD_AsicLpTest_CH
 WHERE TestIndex IN (SELECT MAX(TestIndex) FROM dbo.TROSA_101_InitialTestingLD_AsicLpTest_CH GROUP BY SerialNumber)

本质上,我只想删除 8 行数据的重复集(每行对应一个测试),或者换句话说,为每个唯一SerialNumber值获取最新的 8 行。

标签: sqlsql-servergreatest-n-per-group

解决方案


我不完全遵循您的业务逻辑,但是您问题最后一句中的要求很容易通过使用来获得ROW_NUMBER

SELECT *
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY SerialNumber ORDER BY TestIndex DESC) rn
    FROM dbo.TROSA_101_InitialTestingLD_AsicLpTest_CH
) t
WHERE rn <= 8;

上述查询将返回每个序列号的最近 8 条记录,其中“recent”指的是TestIndex最大值。


推荐阅读