我正在创建一个视图,其中包含来自众所周知的罐头测试和自定义测试的一系列测试结果。 GUI上的按钮可驱动固定测试,文本输入可提供自定义测试。标准%测试:2,5,10,50,75,100;自定义:0-100,作为输入的百分比。
SELECT
SerialNumber, ..., DateTimeStampStarted,
StartingSetpoint, EndingSetpoint... Status, Notes
FROM
dbo.PIDTuneResults
WHERE
(DateTimeStampStarted IN (SELECT MAX(DateTimeStampStarted) AS Expr1
FROM dbo.PIDTuneResults AS PIDTuneResults_1
WHERE (StartingSetpoint = 0
AND EndingSetpoint = 2)
GROUP BY SerialNumber))
此查询返回一个固定测试的(2%),我将这个查询重复6次(UNION),以枚举固定设定值2,5,10,50,75,100。每个查询返回1条记录...在该设备上执行的最后一次测试。现在,我需要自定义测试结果。这是我的尝试,但是任何自定义测试都需要最后一条记录。
SELECT
SerialNumber, ..., DateTimeStampStarted,
StartingSetpoint, EndingSetpoint... Status, Notes
FROM
dbo.PIDTuneResults
WHERE
StartingSetpoint = 0
AND EndingSetpoint NOT IN (2, 5, 10, 50, 75, 100)
如何获得具有任何结束设定值(1-100)的任何自定义测试的最后记录?有没有办法像其他人一样做汇总的qry?
谢谢,丹
答案 0 :(得分:0)
我假设您正在使用sql server
,因为您使用dbo.
引用了一些表名。如果是这样,这是使用row_number
的一种选择:
select *
from (select *,
row_number() over (partition by EndingSetpoint order by DateTimeStampStarted desc) rn
from dbo.PIDTuneResults
where StartingSetpoint=0) t
where rn = 1
这将根据每个EndingSetPoint
的最高DateTimeStampStarted
返回一行。如果您只需要限制1-100个,则只需添加where
个条件。
select *
from (select *,
row_number() over (partition by EndingSetpoint order by DateTimeStampStarted desc) rn
from dbo.PIDTuneResults
where StartingSetpoint=0 and EndingSetpoint >= 1 and EndingSetpoint <= 100) t
where rn = 1