Postgres窗口函数-bigint的rank()分区

时间:2019-03-07 22:35:59

标签: sql postgresql window-functions

我试图按类型为bigint的列对分区上的数据进行排名,但是当我将分区中的列更改为具有时区的timestamp类型的列时,它不起作用。

我的查询如下:

select id,ts_insert,serial_no,rank() over (partition by serial_no order by serial_no desc) from schema.table_name

结果如下:

1,'2019-02-19 18:27:50.258846+11',19516,1
1,'2019-02-19 18:27:50.258846+11',19515,1
1,'2019-02-19 18:27:50.258846+11',19514,1
1,'2019-02-06 19:45:38.896062+11',15069,1
1,'2019-02-05 21:46:28.633325+11',14827,1

预期结果是:

1,'2019-02-19 18:27:50.258846+11',19516,1
1,'2019-02-19 18:27:50.258846+11',19515,2
1,'2019-02-19 18:27:50.258846+11',19514,3
1,'2019-02-06 19:45:38.896062+11',15069,4
1,'2019-02-05 21:46:28.633325+11',14827,5

有人可以帮我吗?

预先感谢...

1 个答案:

答案 0 :(得分:0)

您似乎想要:

select id, ts_insert, serial_no,
       rank() over (partition by id order by serial_no desc)
from schema.table_name;

serial_no是唯一的(至少在您提供的数据中)。如果按唯一列进行分区,则rank()将始终为1