如何从两个选择语句中减去值

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'

【讨论】:

以上是关于如何从两个选择语句中减去值的主要内容,如果未能解决你的问题,请参考以下文章

减去两个数据表值

mysql - 如何从两个查询中减去?

SQL Case 语句中的两个值相减

文件中的两个字符串,将它们转换为整数然后从另一个中减去一个整数

如何从数据库中的两个不同表中减去?

找到匹配元素时从列表中减去值