Prozedur zur Kilometerberechnung

27/05/2008 - 12:14 von rudolf.kiepetz | Report spam
Liebe Profis
Leider birndŽs mich wieder mal ordentlich auf - wie wir Österreicher
auf gut Deutsch so sagen.
Das Problem:
In einer Datenbank habe ich Werte mit Kilometerstànden von Fahrzeugen.
Beispiel:
Objid, Datum, Stand
4711, 2.1.05, 3500
4711, 15.1.05, 4550
4711, 29.1.05, 5800
4711, 4.2.05, 6900
4712, 5.1.05, 8005 usw..
Ich bastle nun an einer Prozedur, die mir für jeden Tag einen
Datensatz mit
objid, datum, km_stand und km_gefahren in eine Datenbank schreibt.
Bin leider nicht sehr erfolgreich dabei!!
Deshalb - bitte um Hilfe.

Mein bisheriges Werk:

create procedure
usp_Fahrzeugkilometer
as

declare @Fzg as varchar (50)
declare @Objid bigint
declare @DatumVon datetime
declare @Stand as float
declare @DatumAlt datetime
declare @StandAlt as float
declare @Tage as int
declare @KM as float
declare @FM_Diff as float
declare @Stand1 as float
declare @DatumAlt1 datetime

declare cur1 cursor for
select distinct Bezeichnung, fzg.objid,
cast(convert(char(8), DatumVon ,112) as datetime) as DatumVon, Stand
from TS_DWH_DB.dbo.Dim_Produktlinen fzg
inner join
(select distinct objid, DatumVon, DatumBis, Stand
from TSDWHRel.dbo.tab_Radsatz_Zaehlerstaende
where syscode='KG') zaehler
on fzg.objid=zaehler.objid
where ebene6 = '4023'
and ebene='Fahrzeugpark'
and fzg.Objid 000050
order by fzg.Objid,cast(convert(char(8), DatumVon ,112) as datetime)

open cur1
fetch from cur1 into @Fzg, @Objid, @DatumVon, @Stand

while (@@fetch_status=0)
begin
set @DatumAlt=@DatumVon
set @StandAlt=@Stand
fetch next from cur1 into @Fzg, @Objid, @DatumVon, @Stand
if @DatumAlt<>@DatumVon
begin
set @Tage=datediff(dd,@DatumAlt,@DatumVon)
set @FM_Diff = (@Stand-@StandAlt)
set @KM=(@Stand-@StandAlt)/ @Tage

set @Stand1=@StandAlt
set @DatumAlt1=@DatumAlt
end
while @DatumAlt1<=@DatumVon
begin
set @DatumAlt1=dateadd(dd,1,@DatumAlt1)
set @Stand1=@Stand1+@KM
select @Fzg, @Objid, @DatumAlt1,@Stand1 --zur überprüfung
end
end
close cur1
deallocate cur1
 

Lesen sie die antworten

#1 Jörg Ackermann
27/05/2008 - 13:01 | Warnen spam
Hallo,

meinte:

Liebe Profis
Leider birndŽs mich wieder mal ordentlich auf - wie wir Österreicher
auf gut Deutsch so sagen.
Das Problem:
In einer Datenbank habe ich Werte mit Kilometerstànden von Fahrzeugen.
Beispiel:
Objid, Datum, Stand
4711, 2.1.05, 3500
4711, 15.1.05, 4550
4711, 29.1.05, 5800
4711, 4.2.05, 6900
4712, 5.1.05, 8005 usw..
Ich bastle nun an einer Prozedur, die mir für jeden Tag einen
Datensatz mit
objid, datum, km_stand und km_gefahren in eine Datenbank schreibt.
Bin leider nicht sehr erfolgreich dabei!!
Deshalb - bitte um Hilfe.

Mein bisheriges Werk:

create procedure
usp_Fahrzeugkilometer
as

declare @Fzg as varchar (50)
declare @Objid bigint
declare @DatumVon datetime
declare @Stand as float
declare @DatumAlt datetime
declare @StandAlt as float
declare @Tage as int
declare @KM as float
declare @FM_Diff as float
declare @Stand1 as float
declare @DatumAlt1 datetime

declare cur1 cursor for
select distinct Bezeichnung, fzg.objid,
cast(convert(char(8), DatumVon ,112) as datetime) as DatumVon, Stand
from TS_DWH_DB.dbo.Dim_Produktlinen fzg
inner join
(select distinct objid, DatumVon, DatumBis, Stand
from TSDWHRel.dbo.tab_Radsatz_Zaehlerstaende
where syscode='KG') zaehler
on fzg.objid=zaehler.objid
where ebene6 = '4023'
and ebene='Fahrzeugpark'
and fzg.Objid 000050
order by fzg.Objid,cast(convert(char(8), DatumVon ,112) as datetime)

open cur1
fetch from cur1 into @Fzg, @Objid, @DatumVon, @Stand

while (@@fetch_status=0)
begin
set @DatumAlt=@DatumVon
set @StandAlt=@Stand
fetch next from cur1 into @Fzg, @Objid, @DatumVon, @Stand
if @DatumAlt<>@DatumVon
begin
set @Tage=datediff(dd,@DatumAlt,@DatumVon)
set @FM_Diff = (@)
set @KM=(@)/ @Tage

set @Stand1=@StandAlt
set @DatumAlt1=@DatumAlt
end
while @DatumAlt1<=@DatumVon
begin
set @DatumAlt1=dateadd(dd,1,@DatumAlt1)
set @Stand1=@Stand1+@KM
select @Fzg, @Objid, @DatumAlt1,@Stand1 --zur überprüfung
end
end
close cur1
deallocate cur1



Versuche mal sowas:

SELECT
Tabelle.fz,
Tabelle.Dat,
Tabelle.Stand,
[Stand]-(Select
Stand
from Tabelle A
where Tabelle.fz=A.fz
And Dat=(Select
max([Dat])
from Tabelle B
where Tabelle.[Dat]>B.[Dat]
And Tabelle.fz = B.fz
)
) AS KM
FROM Tabelle;

Gruß

Ähnliche fragen