我正在尝试编写一个查询,该查询返回给定实体前后的x个元素,该实体按不唯一的属性排序。
例如:属性 a
是主列(唯一的uuid), b
我想按哪个属性排序
table
--------
a b
--------
ag 1
sb 1
sf 1
xk 2
- bd 2
ve 2
ku 2
lt 3
ac 3
如果我想返回a= bd
排序依据 b
之前
SELECT * FROM table WHERE b >= 2 ORDER BY b DESC, a DESC LIMIT x
之后
SELECT * FROM table WHERE b <= 2 ORDER BY b ASC, a DESC OFFSET 1 LIMIT x
如果b的属性是唯一的,这就行了。如何在非唯一属性上执行此操作。
4条答案
按热度按时间6g8kf2rb1#
可以使用窗口函数:
这是一把小提琴。
7vhp5slm2#
这是一个执行窗口的实现
zpjtge223#
你可以的
row_number()
具体如下:mi7gmzs64#
如果向前和向后的行数不是一个固定的数字,您可能会发现这样的方法很有用。
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=a5318a7872bf5e7dc347a00ea4b9f3fc