Berechnung von Durchschnittlichem Verbrauch nach Datum

27/07/2009 - 11:43 von Markus W. | Report spam
Ich muss aus einer Liste von Fahrzeugen mit dem Kilometerstand und den
getankten Litern den Durchschnittlichen Verbrauch errechnen.

FZ Datum KM-Stand Liter
1 01.01.2009 10000 20
1 02.01.2009 10100 10
1 03.01.2009 10200 10
1 05.01.2009 10300 10

Es sollen die gefahrenen Km und der durchschnittliche Verbrauch errechnet
werden vom 02.01.2009 bis 05.01.2009
Für die Km als der Stand am 05.01.2009 minus den Stand am 02.01.2009 10300-
10100 gleich 200km
Beim Verbrauch habe ich aber ein Problem da geht dies nicht so einfach da
die erste Literzahl am 02.01.2009 erst dann getankt wurde und
somit ja für den 01.01.2009 berücksichtigt werden muss.
Also sind für den Verbrauch nur die Taklungen vom 03. und 05.01.2009 zu
berücksichtigen also 20 Liter
Der Durchschnittliche Verbrauch wàre dann also 200km / 20l = 10 l/km

Hat jemand eine gute Idee wie ich das am einfachsten bewerkstelligen kann?

Gruss Markus
 

Lesen sie die antworten

#1 Hans-Werner Stamer
27/07/2009 - 15:48 | Warnen spam
Markus W. schrieb:
Ich muss aus einer Liste von Fahrzeugen mit dem Kilometerstand und den
getankten Litern den Durchschnittlichen Verbrauch errechnen.

FZ Datum KM-Stand Liter
1 01.01.2009 10000 20
1 02.01.2009 10100 10
1 03.01.2009 10200 10
1 05.01.2009 10300 10

Es sollen die gefahrenen Km und der durchschnittliche Verbrauch errechnet
werden vom 02.01.2009 bis 05.01.2009
Für die Km als der Stand am 05.01.2009 minus den Stand am 02.01.2009 10300-
10100 gleich 200km
Beim Verbrauch habe ich aber ein Problem da geht dies nicht so einfach da
die erste Literzahl am 02.01.2009 erst dann getankt wurde und
somit ja für den 01.01.2009 berücksichtigt werden muss.
Also sind für den Verbrauch nur die Taklungen vom 03. und 05.01.2009 zu
berücksichtigen also 20 Liter
Der Durchschnittliche Verbrauch wàre dann also 200km / 20l = 10 l/km

Hat jemand eine gute Idee wie ich das am einfachsten bewerkstelligen kann?

Gruss Markus




Du benoetigst dazu eine zusaetzliche Spalte mit einer laufenden Nummer.
Das geht mit der ROW_NUMBER() Funktion. So kannst du für die Ermittlung
des Verbrauchs die erste Ergebniszeile leicht ausfiltern.

Für die Problemloesung eigent sich eine Common Table Expression (CTE)
sehr gut.

Anbei ein Beispiel mit einer 2-stufigen CTE.
Ergebnis wàre etwa:

fz ltr/100km
1 10.000000
2 6.650000
...

Gruss Werner



declare @von datetime;
declare @bis datetime;
set @von = '20090102';
set @bis = '20090105';

with [cte1] ([row], [fz], [datum], [kmstand], [liter]) as
(
select ROW_NUMBER() over(partition by [fz] order by [kmstand]) as
[row],
[fz], [datum], [kmstand], [liter]
from [t]
where ([datum] between @von and @bis)
),
[cte2] ([fz], [gefahreneKM], [verbrauchteLiter]) as
(
select [a].[fz],
max([a].[kmstand]) -
min([a].[kmstand]) as [gefahreneKM], AVG([b].[verbrauchteLiter])
from [cte1] AS [a] inner join
(select [fz], SUM([liter]) as [verbrauchteLiter]
from [cte1]
where ([row] > 1)
group by [fz]) as [b] on [a].[fz] = [b].[fz]
group by [a].[fz]
)
select [fz], [verbrauchteLiter] * 100 / [gefahreneKM] as [ltr/100km]
from [cte2];

Ähnliche fragen