如何从两个选择语句中减去值
Posted
技术标签:
【中文标题】如何从两个选择语句中减去值【英文标题】:how do I subtract values from two select statements 【发布时间】:2010-04-09 21:48:02 【问题描述】:我想从另一个值中减去一个值。表的架构如下:
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
【问题讨论】:
总是只有两条记录吗?如果不是,您如何决定将哪两条记录相互减去? IE。什么标准与使您决定执行减法的记录相关。我会用它来执行自连接,然后你可以从另一个中减去一个。 其实它是最新的记录,也是过去 10 年的记录,只是为了了解变化率 【参考方案1】:总猜测:
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)
【讨论】:
如果每个查询中只有一个值,那么这将完美运行。 @AaronLS 是的,您只需要对未在聚合语句中使用的字段进行 GROUP BY。【参考方案2】:你真的需要包装 select 语句吗?
您可以声明两个变量@value1
和@value2
并对其进行子构造。
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
【讨论】:
谢谢你...我已经尝试过这个策略,但我无法得到它...我现在看到了我的方式的错误。【参考方案3】:值列的类型是什么?如果它已经是一个整数,那就这样做:
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
否则,您必须将其转换为整数或您想要的任何数字类型
【讨论】:
【参考方案4】: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'
【讨论】:
以上是关于如何从两个选择语句中减去值的主要内容,如果未能解决你的问题,请参考以下文章