【问题标题】:How to get the change number?如何获得零钱?
【发布时间】:2021-10-15 16:06:09
【问题描述】:

source值改变时如何增加值?
我试过rankdense_rankrow_number没有成功=(

id | src | how to get this?
--------
1  |  1  | 1
2  |  1  | 1
3  |  7  | 2
4  |  1  | 3
5  |  3  | 4
6  |  3  | 4
7  |  1  | 5

注意:src 保证按照您看到的顺序排列

有简单的方法吗?

【问题讨论】:

  • 您的查询似乎是不确定的。这将取决于查询返回的值的顺序。
  • @dmg:问题已更新

标签: postgresql window-functions


【解决方案1】:

您可以通过嵌套两个窗口函数来实现这一点 - 第一个获取 src 值是否从上一行更改,第二个获取更改次数。不幸的是 Postgres 不允许直接嵌套窗口函数,但 you can work around that 带有子查询:

SELECT
  id,
  src,
  sum(incr) OVER (ORDER BY id)
FROM (
  SELECT
    *,
    (lag(src) OVER (ORDER BY id) IS DISTINCT FROM src)::int AS incr
  FROM example
) AS _;

(online demo)

【讨论】:

  • 没有子查询是否可以达到相同的目标?
  • @EugenKonkov 您当然可以编写一个自定义聚合函数来执行此操作,但我认为子查询更简单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2014-04-15
  • 1970-01-01
  • 2014-11-22
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多