2017-06-14 1 views
-2

Ich habe Daten in Bezug auf ein Treueprogramm in einem Einzelhandelsgeschäft. Wenn ein Kunde nicht innerhalb von 60 Tagen aus dem Geschäft gekauft hat, gelten diese als abgelaufen und eine Werbeaktion wird versandt, um sie erneut zu kaufen.Inkrement Rang für jede Pause in Folge (T-SQL)

Ich versuche zu analysieren, wie viele aufeinanderfolgende Male sie zurückkommen und wie viele Promotionen wir ihnen geben müssen.

Ein "Spree" ist definiert als Kunde, der Produkte ohne 60-tägige Pause kauft. z.B. wenn ein Kunde ein Produkt alle 59 Tage für sein ganzes Leben kauft, haben sie nur eine Menge von 1.

Ich versuche, einen einfachen Teil des Workaround-Codes zu finden, um die Ausgabe zu erhalten, die unten präsentiert wird. Alle Eingabedaten befinden sich bereits in einer Tabelle.

Eingangsdaten wie folgt aussieht

Input

Ausgabe sollte wie folgt aussehen:

Output

+1

Welche Version von SQL Server? –

+4

Geben Sie Screenshots geben Beispieldaten, die es nützlich sein kann –

+0

SQL Server 2012 – BasicBoy

Antwort

0

Ich glaube, Sie Abfrage suchen, wie unten:

;With Cte as (
    Select *, Spree = sum(Case when Lapsed = 'Y' and NextLapsed = 'N' then 1 else 0 end) over (partition by Customerid order by PurchaseDate) 
    from (
     Select *, NextLapsed = lead(lapsed) over(partition by customerid order by purchasedate) 
     from #YourCustomer 
    ) a 
) 
Select *, [Consecutive Purchases] = Row_Number() over (partition by customerid, spree order by purchaseDate) 
from Cte 

Some assumptio ns

  1. PurchaseDate aufsteigt und ich auf der Grundlage dieser Reihenfolge
  2. Spree und konsekutiv Käufe basierend auf jeden Kunden
+0

Danke, das ist sehr hilfreich! – BasicBoy