我的数据如下
**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() http://www.postgresql.org/docs/current/interactive/functions-window.html.
- 形成连续几天的组(同一日期
grp
) 在子查询中sub
.
- 与另一个编号行
row_number()
调用,这次划分为grp
.
由于窗口函数不能嵌套,因此此处最少需要一个子查询。
SQL 小提琴。 http://sqlfiddle.com/#!15/ca77f/2
请注意,我使用了矛盾样本数据的第二个版本。结果是这样的@mu建议 https://stackoverflow.com/users/479863/mu-is-too-short在他的评论中。
还假设没有重复的日期。在这种情况下,您必须首先聚合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)