2015-03-25 67 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