PostgreSQL仅排序有序数据上的连续行

时间:2016-02-04 07:12:41

标签: postgresql rank dense-rank

所以我遇到了这个有趣的问题,起初看起来很容易使用一个简单的sql窗口函数。 但它不是。任何只使用排名或密集排名的解决方案?

基本上我想根据汽油价格分配排名并从日期开始生效。表结构及其数据如下。

[1]: http://i.stack.imgur.com/se6mB.png

1 个答案:

答案 0 :(得分:2)

如果你期望这样的输出

price dte        rn 
----- ---------- -- 
65.5  2013-06-01 1  
66.3  2014-06-01 1  
66.3  2015-12-01 2  
67    2012-01-01 1  
67    2012-06-01 2  
67    2013-01-01 3  
67    2014-01-01 4  
67    2016-01-01 5  

查询应该是

select *
      ,row_number() over(partition by price order by dte) rn
from price;

OR

SELECT *
       ,rank() OVER (PARTITION BY price ORDER BY dte) rn
FROM price;

PostgreSQL' Window functions