【发布时间】:2015-10-22 18:10:32
【问题描述】:
我们有一个项目表,每个项目都有一个发票 ID。我们根据发票 ID 分块处理这些数据(一次 100 张“发票”)。您能否协助创建一个查询,该查询将为每组 100 张发票(块)分配一个组 ID。这是我们希望达到的逻辑示例:
在这种情况下,我们知道我们提前有 9 行和 5 张发票。我们希望创建每个组包含 2 张发票(最后一组除外)的组。
【问题讨论】:
标签: postgresql
我们有一个项目表,每个项目都有一个发票 ID。我们根据发票 ID 分块处理这些数据(一次 100 张“发票”)。您能否协助创建一个查询,该查询将为每组 100 张发票(块)分配一个组 ID。这是我们希望达到的逻辑示例:
在这种情况下,我们知道我们提前有 9 行和 5 张发票。我们希望创建每个组包含 2 张发票(最后一组除外)的组。
【问题讨论】:
标签: postgresql
SELECT n1.*,
n2.r
FROM dbtable n1,
-- Group distinct inv_ids per group of 2
-- or any other number by changing the /2 to e.g., /4
(SELECT inv_id,
((row_number() OVER())-1)/2 AS r
FROM
-- Get distinct inv_ids
(SELECT DISTINCT inv_id AS inv_id
FROM dbtable
ORDER BY inv_id) n2a) n2
WHERE n1.inv_id=n2.inv_id ;
此查询的优点是即使 inv_id 不连续也会选择正确的 inv_ids 组。
SQL 小提琴here
【讨论】: