基于日期顺序的排名[英] Rank based on sequence of dates

本文是小编为大家收集整理的关于基于日期顺序的排名的处理方法,想解了基于日期顺序的排名的问题怎么解决?基于日期顺序的排名问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我的数据如下

**Heading    Date**
A          2009-02-01
B          2009-02-03
c          2009-02-05
d          2009-02-06
e          2009-02-08

我需要排名如下

Heading    Date           Rank
A          2009-02-01      1
B          2009-02-03      2
c          2009-02-05      1
d          2009-02-06      2
e          2009-02-07      3

因为我需要基于日期的排名.如果日期是连续的,则排名应为 1、2、3 等.如果日期有任何中断,我需要从 1、2、... 重新开始

谁能帮我解决这个问题?

推荐答案

SELECT heading, thedate
      ,row_number() OVER (PARTITION BY grp ORDER BY thedate) AS rn
FROM  (
   SELECT *, thedate - (row_number() OVER (ORDER BY thedate))::int AS grp
   FROM   demo
   ) sub;

当您谈到"排名"时,您似乎想要窗口函数的结果 row_number().

  1. 在子查询 sub 中形成连续日期组(grp 中的同一日期).
  2. 用另一个 row_number() 调用编号行,这次由 grp 分区.

这里只有一个子查询,因为窗口函数不能嵌套.

SQL 小提琴.

请注意,我使用了您的矛盾样本数据的第二个版本.结果与他的评论中的 @mu 建议一样.
还假设没有重复的日期.在这种情况下,您必须先聚合.

本文地址:https://www.itbaoku.cn/post/1764054.html