【问题标题】:Postgresql create fixed size groups of rowsPostgresql 创建固定大小的行组
【发布时间】:2015-10-22 18:10:32
【问题描述】:

我们有一个项目表,每个项目都有一个发票 ID。我们根据发票 ID 分块处理这些数据(一次 100 张“发票”)。您能否协助创建一个查询,该查询将为每组 100 张发票(块)分配一个组 ID。这是我们希望达到的逻辑示例:

在这种情况下,我们知道我们提前有 9 行和 5 张发票。我们希望创建每个组包含 2 张发票(最后一组除外)的组。

【问题讨论】:

    标签: postgresql


    【解决方案1】:
    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

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 2016-06-21
      • 2015-05-05
      • 1970-01-01
      • 2019-10-13
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      相关资源
      最近更新 更多