将存储过程的值与最新输入的行和一些固定行进行比较

Comparing values of a stored procedure with the latest entered row and some fixed row

我创建了一个包含两列的 table,其中包含对数时间值,例如:

CREATE TABLE REF_LOGTIME ( LOGTIME1 datetime NOT NULL, LOGTIME2 datetime NOT NULL )

INSERT INTO REF_LOGTIME(LOGTIME1,LOGTIME2) VALUES ('2014-09-1 07:09:00.000','2014-10-10 07:10:00.000')

我有一个存储过程,其中 returns logtime、beam_current、st1_vs1_bag1_rb...等等。 我想将存储过程中最新输入的行与 LOGTIME1 和 LOGTIME2 之间的行进行比较,并且必须仅检索 beam_current 为 10mA、20mA、30mA....100mA 的那些行并计算各种 BAG 值之间的差异,即 st1_vs1_bag1_rb、st1_vs1_bag2_rb.. 只有 beam_current 是 10mA、20mA... 我正在使用 Sql 服务器 2102。

如果我的理解是正确的,您想将 table 中最后插入的行与此 table REF_LOGTIME 进行比较,并根据给定条件获取值。您没有提供足够的详细信息,所以我假设您有兴趣从中获取值的 table 是 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