Abstand zwischen zwei Datümmern ermitteln

17/09/2008 - 15:05 von Christa Kurschat | Report spam
Hallo Leute,

ich brauche mal eine Denkhilfe.

Ich habe eine Tabelle mit Umsatzdaten, u.a. mit Auftragsdatum und eine
Kundentabelle mit Eintrittsdatum.
Jetzt muß ich die Umsàtze klassifizieren und zwar:
Neukunde: Der Umsatz wurde innerhalb von 12 Monaten nach Eintrittsdatum
getàtigt
reaktivierter Kunde: Die Differenz zwischen diesem und dem letzten Umsatz
betràgt mehr als 36 Monate
Bestandskunde: alle anderen

Das erste kriege ich hin, das letzte auch, aber beim zweiten habe ich
überhaupt keine Idee, wie das performant umgesetzt werden könnte.
Ein Cursor kommt nicht in Frage. Es handelt sich beim initialen Aufbau um
mehr als 11 Mio DS bei den Umsàtzen und ca. 1 Mio. Kunden.

Wenn jemand eine Idee hat, gerne auch im SSIS, dann immer her damit.

Gruß
Christa
Access-FAQ: http://www.donkarl.com
SQL-Server-FAQ: www.sqlfaq.de
InsideSql: www.insidesql.org
 

Lesen sie die antworten

#1 Hans-Werner Stamer
17/09/2008 - 17:03 | Warnen spam
Am Wed, 17 Sep 2008 15:05:08 +0200 schrieb Christa Kurschat:

Hallo Leute,



Hallo Christa!

ich brauche mal eine Denkhilfe.

Ich habe eine Tabelle mit Umsatzdaten, u.a. mit Auftragsdatum und eine
Kundentabelle mit Eintrittsdatum.
Jetzt muß ich die Umsàtze klassifizieren und zwar:
Neukunde: Der Umsatz wurde innerhalb von 12 Monaten nach Eintrittsdatum
getàtigt
reaktivierter Kunde: Die Differenz zwischen diesem und dem letzten Umsatz
betràgt mehr als 36 Monate
Bestandskunde: alle anderen

Das erste kriege ich hin, das letzte auch, aber beim zweiten habe ich
überhaupt keine Idee, wie das performant umgesetzt werden könnte.
Ein Cursor kommt nicht in Frage. Es handelt sich beim initialen Aufbau um
mehr als 11 Mio DS bei den Umsàtzen und ca. 1 Mio. Kunden.

Wenn jemand eine Idee hat, gerne auch im SSIS, dann immer her damit.



Anbei ein kleines Beispiel als erste Hilfe.

Gruß
Werner

use tempdb
go
create table auftraege (id int primary key identity,
kundennr int,
auftragsdatum datetime)
go
create table kunden (kundennr int primary key identity(1,1),
eintrittsdatum datetime)
go
insert into kunden (eintrittsdatum)
select '20080101' union all
select '20080101' union all
select '20080101'
go
insert into auftraege (kundennr, auftragsdatum)
select 1, '20040101' union
select 1, '20030101' union
select 2, '20020101' union
select 2, '20070101'
go


select k.kundennr,
k.eintrittsdatum,
u.letzterumsatz,
'klassifizierung' = case
when datediff(m, u.letzterumsatz, k.eintrittsdatum)
36 then 'reaktiviert'


when datediff(m, u.letzterumsatz, k.eintrittsdatum)
<= 12 then 'Neukunde'
else 'Bestandskunde' end
from kunden AS k
left outer join (select kundennr,
max(auftragsdatum) as letzterumsatz
from auftraege
group by kundennr) as u
on k.kundennr = u.kundennr;



drop table auftraege
go
drop table kunden
go

Ähnliche fragen