2015-03-25 39 views
0

我有一个选择查询获取CarID,月份,里程和二氧化碳排放量。 现在给出了每车每月的行驶里程是这样的:选择字段值减去以前的字段值

month 1: 5000 
month 2: 5200 
... 

我真正需要的是,它需要的电流值减去前一个。我在特定的时间范围内获取数据,并且在该时间范围之前已经包含了一个里程数。所以每个月可以获得总里程数,我只是不知道如何。我想要的是这个。

pre timeframe: 5000 
month 1:  200 
month 2:  150 
... 

我该怎么做?

编辑:代码,我还没有尝试过任何东西,因为我不知道如何开始这样做。

resultlist as (
SELECT 
    CarID 
, '01/01/2000' as beginmonth 
, MAX(kilometerstand) as Kilometers 
, MAX(Co2Emission) as CO2 
FROM 
    totalmileagelist 
GROUP BY CarID 

UNION 

SELECT 
    CarID 
, beginmonth 
, MAX(kilometerstand) as Kilometers 
, MAX(Co2Emission) as CO2 
FROM 
resultunionlist 
GROUP BY CarID, beginmonth 
) 

select * from resultlist 
order by CarID, beginmonth 

EDIT2:解释代码

在结果列表中的第一部分,我抓住每车最新的里程。在第二部分,工会结束后,我每月每辆车抢最新的里程数。

+1

分享你的表架构和查询您是否尝试过 – 2015-03-25 10:53:03

+0

添加它。我还没有尝试过查询,因为我不知道从哪里开始。 – Robin 2015-03-25 10:55:05

回答

0

如果你只是想减去以前milage,使用lag()功能:

select ml.*, 
     (kilometerstand - lag(kilometerstand) over (partition by carid order by month) 
     ) as diff 
from totalmileagelist ml; 

lag()在SQL Server 2012+中可用。在早期版本中,您可以使用相关的子查询或outer apply

(我错过了版本,因为它是在标题,而不是在标签上。)在SQL Server 2008:

select ml.*, 
     (ml.mileage - mlprev.mileage) as diff 
from totalmileagelist ml outer apply 
    (select top 1 ml2.* 
     from totalmileagelist ml2 
     where ml2.CarId = ml.CarId and 
      ml2.month < ml.month 
     order by ml2.month desc 
    ) mlprev; 
+0

我正在使用SQL Server 2008,我会看看outer apply。谢谢 – Robin 2015-03-25 11:02:41

+0

这工作,非常感谢你! – Robin 2015-03-25 11:09:17

0

尝试这样的:

SELECT id, yourColumnValue, 
     COALESCE(
     (
     SELECT TOP 1 yourColumnValue 
     FROM table_name t 
     WHERE t.id> tbl.id 
     ORDER BY 
      rowInt 
     ), 0) - yourColumnValue AS diff 
FROM table_name tbl 
ORDER BY 
     id 

或像这样使用rank()

select rank() OVER (ORDER BY id) as 'RowId', mileage into temptable 
from totalmileagelist 

select t1.mileage - t2.mileage from temptable t1, temptable t2 
where t1.RowId = t2.RowId - 1 

drop table temptable 
+0

我会看看这个,谢谢。 – Robin 2015-03-25 11:02:50

+0

@Robin: - 欢迎您 – 2015-03-25 11:05:45