我创建了一个包含两列的表,该表具有logtime值,例如:
创建表REF_LOGTIME ( LOGTIME1日期时间不为空, LOGTIME2日期时间不为空 )
插入REF_LOGTIME(LOGTIME1,LOGTIME2) 值 ('2014-09-1 07:09:00.000','2014-10-10 07:10:00.000')
我有一个返回日志时间的存储过程,beam_current,st1_vs1_bag1_rb....等等。我想将存储过程中最新输入的行与LOGTIME1和LOGTIME2之间的行进行比较,并且必须仅检索beam_current为 10mA、20mA、30mA 的行......100mA并计算各种袋值之间的差异,即st1_vs1_bag1_rb,st1_vs1_bag2_rb.。只有当beam_current是10mA,20mA...我正在使用 Sql Server 2102。
如果我的理解是正确的,您希望将表中最后插入的行与此表进行比较 REF_LOGTIME
并根据给定条件获取值。您没有提供足够的详细信息,因此我假设您有兴趣从中获取值的表是TableOfValues
.下面的查询为您提供了我了解您需要的内容。请检查并让我知道它是否有效。如果需要,可以将其包装在存储的进程中。
SELECT A.LogTime, A.Beam_Current, B.LOGTIME1, B.LOGTIME2
CASE WHEN (A.Beam_Current / 10) IN (1, 2)
THEN (A.st1_vs1_bag1_rb - A.st1_vs1_bag2_rb) ELSE NULL END AS DIFF_BAG_VALUES --To check if beam_current is 10mA,20mA
FROM
(
SELECT TOP 1 ROW_NUMBER() OVER (ORDER BY LogTime) Row_Num,
logtime,beam_current,st1_vs1_bag1_rb, st1_vs1_bag2_rb
FROM [TableOfValues] ORDER BY 1 DESC --To get the latest entered row
)A JOIN REF_LOGTIME B ON A.LOGTIME BETWEEN B.LOGTIME1 AND B.LOGTIME2
AND B.Beam_Current % 10 = 0 -- To check if beam_current is 10mA,20mA,30mA....100mA