2010-04-09 73 views
4

減去值我想從另一個值減去一個值。表的模式如下:如何從兩個SELECT語句

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)) 

顯然我迷路了......我該怎麼做。

感謝

MS-SQL

+0

有沒有永遠只有兩個記錄?如果不是,你如何決定哪兩個記錄相互減去?即什麼樣的標準使你決定執行減法的記錄相關。我會用它來進行自連接,那麼你可以減去一個從其他。 – AaronLS 2010-04-09 21:56:20

+0

實際上是它的最新記錄和過去的10次記錄,只是爲了獲得變化率的指示 – fishhead 2010-04-09 22:06:07

回答

8

總猜測:

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) 
+0

如果每個查詢中只有一個值,那麼這將完美工作。 – SqlRyan 2010-04-09 21:54:53

+0

將馬克斯沒有一組(值)的工作,即價值呢? – AaronLS 2010-04-09 22:02:17

+2

@AaronLS是的,你只需要對你是不是在聚合語句中使用的字段GROUP BY。 – 2010-04-09 22:03:53

1

你真的需要包裝的select語句?

你可以聲明兩個變量@value1@value2和substruct他們。

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 
+0

感謝...我已經試過了策略,但我無法得到它...我現在看到的我的方式錯誤。 – fishhead 2010-04-09 22:02:22

0

什麼是值列的類型?如果它已經是一個整數只做:

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 

否則你將不得不強制轉換爲整數或任何數字類型你想

0
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'