将数据拆分为 teradata 中的同质子组

split data into homogeneous subgroups in teradata

作为我的 select 的一部分,我正在使用以下内容:

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

将我的数据分成 100 个子组。我遇到的问题是子组可以包含 1 个以上的类别。是否可以确保子组仅包含一个类别,即使子组中的行数小于 100。我尝试使用 PARTITION BY 但这没有用。

最多 100 行分配给一个子组,并且在一个子组内只有来自单个类别的行?

您可能需要一个两步走的方法:

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