Sql 如何从表格中为表格中的唯一序列号选择最近的8行

Sql 如何从表格中为表格中的唯一序列号选择最近的8行,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,我使用labview制作了自动测试GUI,用于测试我们的8通道设备。每次测试完成时,都会自动将8行添加到SQL Server表中,并且所有这8行都记录了相同的序列号。每次完成测试时,都会添加8行,无论是否已测试此序列号。我想做的是获取所有唯一序列号的最新数据,总是8行 到目前为止,我只能使用以下代码对单行输入测试执行此操作: SELECT TestIndex FROM dbo.TROSA_101_InitialTestingLD_AsicLpTest_CH WHERE TestIndex

我使用labview制作了自动测试GUI,用于测试我们的8通道设备。每次测试完成时,都会自动将8行添加到SQL Server表中,并且所有这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行数据。

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


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

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


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

谢谢!这工作做得很好!是的,逻辑可能不是最有意义的lol。我们在一个研发环境中,我负责许多不同的任务,所以几乎没有什么是优化的!尽管我很好奇,如果你对如何做事有不同的建议,你的意思是什么谢谢这工作做得很好!是的,逻辑可能不是最有意义的lol。我们在一个研发环境中,我负责许多不同的任务,所以几乎没有什么是优化的!尽管我很好奇,如果你对如何做事有不同的建议,你的意思是什么
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;