Reputation: 6109
I would like to subtract one value from another value. The schema of the table is as follows:
tag, datetime,value
------------
tag1, 2010-1-1 10:10:00, 123
tag2, 2010-2-2 10:12:00. 321
select * from
( (Select Max(Value) as [Value1] from History WHERE Datetime ='2010-1-1 10:10' and tagname ='tag1') as v1 -
( (Select Max(Value) as [Value2] from History WHERE Datetime ='2010-1-1 10:12' and Tagname ='tag2') as v2))
obviously I am lost...how do I do this.
thanks
ms-sql
Upvotes: 5
Views: 21672
Reputation: 38367
select h1.value - h2.value
from History h1
inner join History h2 on h1.Datetime = '2010-1-1 10:10' and Datetime ='2010-1-1 10:12'
Upvotes: 0
Reputation: 11780
What is the type of the value column? If it is already an integer just do:
SELECT
(Select Max(Value) as [Value1] from History WHERE Datetime ='2010-1-1 10:10' and tagname ='tag1') as v1 -
(Select Max(Value) as [Value2] from History WHERE Datetime ='2010-1-1 10:12' and Tagname ='tag2') as v2
else you will have to cast it as an integer or whatever numeric type you want
Upvotes: 0
Reputation: 16032
Do you really need wrapping select statement?
You can declare two variables @value1
and @value2
and substruct them.
declare @value1 int, @value2 int
select @value1 = Max(Value) as [Value1] from History WHERE Datetime ='2010-1-1 10:10' and tagname ='tag1'
select @value2 = Max(Value) as [Value2] from History WHERE Datetime ='2010-1-1 10:12' and Tagname ='tag2'
select @value1 - @value2
Upvotes: 1
Reputation: 26190
Total guess:
select v1.Value1 - v2.Value2 from
(Select Max(Value) as [Value1] from History WHERE Datetime ='2010-1-1 10:10' and tagname ='tag1') as v1
CROSS JOIN
( (Select Max(Value) as [Value2] from History WHERE Datetime ='2010-1-1 10:12' and Tagname ='tag2') as v2)
Upvotes: 9