2012-07-17 91 views
0

我很难从同一列中减去数据。我的数据结构看起来像这样:从同一列中减去数据

TimeStamp ID state Gallons 
1/01/2012 1 NY  100 
1/05/2012 1 NY  90 
1/10/2012 1 NY  70 
1/15/2012 1 NY  40 

所以我想得到的结果(100-40)= 60加仑用于那段时间。我尝试使用以下查询:

SELECT T1.Gallons, T1.Gallons -T1.Gallons AS 'Gallons used' 
FROM Table 1 AS T1 
where Date = '2012-07-01' 
ORDER BY Gallons 

这似乎是一个简单的方法来做到这一点。但是,我无法找到一种有效的方法来将时间戳作为检索正确值的方式(例如2012年1月1日的加仑值 - 2012年1月30日的加仑值)。

ps。 “加仑”的值将始终降低

+0

你错过了这一点的其他部分。你没有在任何地方指定它应该比较的其他价值。 – 2012-07-17 19:03:26

回答

5
select max(gallons) - min(gallons) 
from table1 
group by Date 
having Date = '2012-07-01' 
+0

为什么在'有'的日期?为什么是7月1日? – 2012-07-17 19:13:34

+0

我运行此查询时遇到此错误 列'dbo.ADS_Device_Data.Device_Data_ID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 – 2016-09-20 14:11:44

+0

发布一个问题详情@faisal – Rab 2016-09-21 18:25:14

2

尝试

select max(gallons) - min(gallons) 
from table1 t1 
where date between '2012-01-01' and '2012-01-31' 
0
SELECT MAX(gallons) - MIN(gallons) AS 'GallonsUsed' 
FROM table; 

在这种情况下将工作,如果你正在做月度报告这可能是工作。加仑的价值如何不增加?当你用完时会发生什么?

+0

感谢您的输入。你说得对,我刚才提到,为了解决这个问题,排除了这个事件的可能性。 – Rick 2012-07-17 19:15:42

0

你会一直在比较最大和最小量吗?如果没有,也许像下面的东西就足够了(通用示例)?您第一次运行脚本时会出现错误,但您可以忽略它。

drop table TableName 
create table TableName (id int, value int) 

insert into TableName values (3, 20) 
insert into TableName values (4, 17) 
insert into TableName values (5, 16) 
insert into TableName values (6, 12) 
insert into TableName values (7, 10) 

select t1.value - t2.value 
from TableName as t1 inner join TableName as t2 
    on t1.id = 5 and t2.id = 6 

你要求的东西是最后一行。在我们将内部表格加入到自己的表格之后,我们只需要将两行与特定的id匹配。或者,就像你的情况一样,不同的日期。