Announcement

Collapse
No announcement yet.

Kunde als Neukunde identifizieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kunde als Neukunde identifizieren

    Ich weiss der Titel ist etwas wage aber ich weiss nicht wie ich mein Problem am besten betiteln soll. Folgendes, ich habe eine Tabelle Bestellungen mit den Feldern Bestelldatum, KundenID (natürlich noch weitere, doch einfachheitshalber brauchen wir nur mal diese). Nun brauche ich eine Abfrage welche mir die KundenID und den Kundenstatus (Neukunde, bestehender Kunde) ausgibt. Und zwar soll folgende Regel angewendet werden:

    - Hat eine Kunde nur eine Bestellung ist er Neukunde.
    - Hat der Kunde mehrere Bestellungen ist er bestehender Kunde
    - Liegen mehr als 6 Monate zwischen der aktuellsten und der 2. aktuellsten Bestellung, gilt der Kunde wieder als Neukunde.

    Kann mir jemand weiter helfen wie ich den 3. Fall per SQL abbilden kann?

    Danke für eure Tipps.

  • #2
    Welche Datenbank nutzt du?
    Wenn MS SQLServer dann, geht's so:
    PHP Code:
     SELECT
        Kunde
        
    ,Status = CASE    WHEN COUNT(BS_Nr) = 1 THEN 'NeuKunde'
                        
    WHEN (Select TOP 1 BS_Datum FROM Bestellungen b2
                                WHERE b1
    .Kunde b2.Kunde
                                
    AND MAX(b1.BS_Nr) > b2.BS_Nr
                                
    AND MAX(b1.BS_Datum) - b2.BS_Datum 180
                                
    IS NOT NULL THEN 'BestandsKunde'
                        
    ELSE 'NeuKunde' END
     FROM Bestellungen b1
     GROUP by Kunde 
    Dies ist jedoch nicht sehr performant.


    - Liegen mehr als 6 Monate zwischen der aktuellsten und der 2. aktuellsten Bestellung, gilt der Kunde wieder als Neukunde.
    Bei dieser Bedingung, wäre auch ein Kunde ein "Bestandskunde", der bspw. im Jan 1999 und Feb 1999 etwas bestellt hat.
    Deshalb würde es meiner Meinung nach sinnvoller sein zu prüfen,
    ob es zwei Bestellungen innerhalb der letzten 6 Monate/180 Tage gab.

    Die funktioniert so
    PHP Code:
      SELECT
        Kunde
        
    ,Status = CASE WHEN SUM(CASE WHEN BS_Datum GETDATE()-180 
                                    THEN 1 
                                    
    ELSE 
                                END
                                
    ) > 
                        THEN 
    'BestandsKunde' 
                        
    ELSE 'NeuKunden' 
                        
    END
     FROM Bestellungen
     group by Kunde 
    Und Falk Prüfer sprach: Formatierung von SQL in Beiträgen

    Comment

    Working...
    X