sql - 如何从表中选择最近的 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 行。
解决方案
我不完全遵循您的业务逻辑,但是您问题最后一句中的要求很容易通过使用来获得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
最大值。
推荐阅读
- firebase - 如何在不登录的情况下将用户数据保存在数据库中?
- javascript - 下拉菜单自动更新按钮的 URL
- python - 如何获取bugzilla登录的api token
- python - Python(tkinter)获取检查了哪些检查按钮?
- java - Webdriver 在使用 selenium + cucumber + Page Factory Model 开发的框架上在功能文件执行时返回 null
- r - 在 RStudio 中打包 Metatrader
- reactjs - 对对象数组和 setState 进行排序导致无限循环
- python - 非常慢的 pyspark 过滤器
- azure-devops - 如何在 Azure DevOps 中查看用户的提交历史记录?
- firebase - Flutter firebase 查询未按预期工作