2017-07-11 4 views
0

Im Rahmen meines wähle ich die bin mit folgenden:aufgeteilt Daten in homogene Untergruppen in teradata

1 + FLOOR((ROW_NUMBER() OVER (ORDER BY Category, Id) - 1)/100) AS SubGroup 

meine Daten in Subgruppen von 100. Die Frage, die ich habe zu teilen ist, dass Subgruppen mehr als 1 Kategorie enthält . Ist es möglich, sicherzustellen, dass Untergruppen nur eine Kategorie enthalten, auch wenn die Anzahl der Zeilen in einer Untergruppe kleiner als 100 ist. Ich habe versucht, PARTITION BY zu verwenden, aber das hat nicht funktioniert.

Antwort

1

Maximal 100 Zeilen, die einer Untergruppe und innerhalb einer Untergruppe nur Zeilen aus einer Kategorie zugeordnet sind?

Sie müssen wahrscheinlich einen zweistufigen Ansatz:

SELECT ... 
    -- start a new sub group for every category or after 100 rows 
    Sum(CASE WHEN rn MOD 100 = 1 THEN 1 ELSE 0 END) 
    Over (ORDER BY category, rn 
     ROWS Unbounded Preceding) AS SubGroup 
FROM 
(
    SELECT ... 
     -- row number per category 
     Row_Number() Over (PARTITION BY Category ORDER BY Id) AS rn 
    FROM mytab 
) AS dt