将存储过程的值与最新输入的行和一些固定行进行比较
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
我创建了一个包含两列的 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