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

时间:2017-07-11 12:46:53

标签: sql teradata

作为我选择的一部分,我使用以下内容:

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

将我的数据拆分为100个子组。我遇到的问题是子组可以包含多个类别。是否可以确保子组仅包含一个类别,即使子组中的行数小于100也是如此。我尝试使用PARTITION BY,但这不起作用。

1 个答案:

答案 0 :(得分:1)

最多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