将数据拆分为 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
作为我的 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