在DB2中,你可以使用`ROW_NUMBER()`窗口函数来为表中的每一行分配一个唯一的序号。然后,基于这个序号,你可以将数据划分成指定数量的组,并确定每组的上边界和下边界。
假设你的表名为 `my_table` 并且它有一个唯一索引列叫做 `id`。你想把1000条记录分成10组,那么每组应该包含100条记录(如果记录数不能被组数整除,最后几组可能包含较少的记录)。
下面是一个SQL查询的例子,它可以计算出每组的上边界和下边界:
```sql
WITH NumberedRows AS (
SELECT
id,
ROW_NUMBER() OVER (ORDER BY id) AS rn
FROM
my_table
),
GroupedData AS (
SELECT
id,
rn,
FLOOR((rn - 1) / 100) + 1 AS group_number -- 每100个一组
FROM
NumberedRows
)
SELECT
group_number,
MIN(rn) AS lower_bound, -- 组的下边界
MAX(rn) AS upper_bound -- 组的上边界
FROM
GroupedData
GROUP BY
group_number
ORDER BY
group_number;
这个查询首先通过 `ROW_NUMBER()` 函数给每一行分配了一个行号 (`rn`)。然后,我们使用 `FLOOR` 函数来根据行号确定每个记录所属的组编号。这里我们假设每100条记录作为一个组,因此 `(rn - 1) / 100` 的结果会被向下取整,并加1得到组编号。
最后,我们按组编号分组并找出每组的最小行号作为下边界,最大行号作为上边界。这样你就能得到每个组的数据范围了。
如果你想要具体的 `id` 值而不是行号作为边界,你可以相应地调整 `MIN(id)` 和 `MAX(id)` 来获取这些值。确保 `id` 列是连续的或者至少在逻辑上可以区分不同的组,否则直接使用 `id` 可能不会得到正确的分组边界。
标签:group,边界,海量,行号,SQL,100,rn,id,分段 From: https://blog.csdn.net/weixin_43803780/article/details/143032177