SQL:我想根据一个标准比较三行数据,找出数值最小的那一行
SQL: I want to compare three rows of data based on a criterion and identify the one with the lowest value
我有一个检查 table 显示序列号、检查 (Characteristic) 和测试结果 (TestValue)。在示例 table 中,我为每个序列号显示了五项检查,但对于一组检查,我需要找到具有最低值的一项。我实际上需要 90
的绝对值减去 TESTVALUE 并确定最低的小数结果。我没有在我的示例 table 中包含该计算。我尝试了几种不同的方法,但最终都失败了,因为它们没有考虑多个标准,而只需要在特定的集合上进行计算。
这些数据进入报告,我尝试在 Report Builder 中这样做,但效果并不好。
TABLE:检查
列:序列、特征、测试值
以后请提供文本形式的示例数据,而不是图像。
请注意 left(Characteristic,5)
...这可能是一个问题
也许这会有所帮助
Select *
,MinValue = TestValue
* case when sum(1) over (partition by Serial,left(Characteristic,5)) > 1 then 1 end
* case when TestValue = min(TestValue) over (partition by Serial,left(Characteristic,5)) then 1 end
From YourTable
结果
通常在查找组中的最低值时,我会建议使用 ROW_NUMBER
函数来识别您感兴趣的行。但是,在这种情况下,子查询似乎是一个不错的选择。
子查询应该是这样的:
select serial, min(testvalue) as mintestvalue
from table
where characteristic like 'Angle%'
group by serial
现在您拥有了每个序列号所需的适当测试值。将此子查询左连接到 serial
号上的数据集,以将 mintestvalue
列包含在数据集中。
我有一个检查 table 显示序列号、检查 (Characteristic) 和测试结果 (TestValue)。在示例 table 中,我为每个序列号显示了五项检查,但对于一组检查,我需要找到具有最低值的一项。我实际上需要 90
的绝对值减去 TESTVALUE 并确定最低的小数结果。我没有在我的示例 table 中包含该计算。我尝试了几种不同的方法,但最终都失败了,因为它们没有考虑多个标准,而只需要在特定的集合上进行计算。
这些数据进入报告,我尝试在 Report Builder 中这样做,但效果并不好。
TABLE:检查 列:序列、特征、测试值
以后请提供文本形式的示例数据,而不是图像。
请注意 left(Characteristic,5)
...这可能是一个问题
也许这会有所帮助
Select *
,MinValue = TestValue
* case when sum(1) over (partition by Serial,left(Characteristic,5)) > 1 then 1 end
* case when TestValue = min(TestValue) over (partition by Serial,left(Characteristic,5)) then 1 end
From YourTable
结果
通常在查找组中的最低值时,我会建议使用 ROW_NUMBER
函数来识别您感兴趣的行。但是,在这种情况下,子查询似乎是一个不错的选择。
子查询应该是这样的:
select serial, min(testvalue) as mintestvalue
from table
where characteristic like 'Angle%'
group by serial
现在您拥有了每个序列号所需的适当测试值。将此子查询左连接到 serial
号上的数据集,以将 mintestvalue
列包含在数据集中。