如何给组分配号码?

时间:2019-07-04 08:26:04

标签: postgresql grouping

我可以使用row_number()函数为组内的行分配数字:

SELECT
  a.docn as agreement,
  o.id as order_id,
  (ROW_NUMBER() over (PARTITION BY a.id, o.id, ois.consumed_period )) as group_id
  ...

enter image description here

但是如何为组分配号码?

enter image description here

1 个答案:

答案 0 :(得分:0)

似乎找到了答案。 doc

  

表9.60中列出的所有功能取决于关联窗口定义的ORDER BY子句指定的排序顺序。 仅考虑ORDER BY列时没有区别的行被称为对等行。定义了四个排名函数(包括cume_dist),以便它们为所有对等行给出相同的答案。

select
  a.docn as agreement,
  o.id as order_id,
  (dense_rank() over (PARTITION BY a.id, o.id ORDER BY ois.consumed_period )) as group_id,

在这里,我使用dense_rankRank the current row within its partition without gaps ,然后使用order by create peers 。 因此dense_rankois.consumed_period

的每个 distinct 值分配下一个数字

enter image description here