【问题标题】:select all rows after specific uuid in postgresql在postgresql中选择特定uuid之后的所有行
【发布时间】:2026-01-18 17:50:01
【问题描述】:

我想选择从特定 uuid 开始的所有行,例如这里是数据

+--------------------------------------+-----------+------------+
|                 uuid                 | divisi_id | divisionid |
+--------------------------------------+-----------+------------+
| b303a96b-2a03-4b5e-90a1-6b3631fc82af | BTT       |          3 |
| 8c4bf1b8-7477-42e4-affb-31bafa8648f1 | BTT       |          3 |
| 6639909d-74e1-4dec-a1f3-f70703c0b6c6 | BTT       |          3 |
| 1a1aa367-1467-4811-848d-694dbe98a5a8 | BTT       |          3 |
| e739b352-d952-4ec8-980e-a50180e18144 | BTT       |          3 |
+--------------------------------------+-----------+------------+

现在,例如我有最后一个uuid = 8c4bf1b8-7477-42e4-affb-31bafa8648f1(第二个条目)。如何在该 uuid 之后选择行?我不知道。

【问题讨论】:

  • 请阅读meta.*.com/questions/285551/… 和接受的答案
  • uuid 没有自然顺序,因此不存在 uuid“在”另一个之后
  • 谢谢@a_horse_with_no_name。我会将图像转换为文本表。那么,我的问题没有解决方案吗?
  • 请先将您的问题编辑为格式化文本并定义排序算法
  • uuids have an ordering, but it is rather a technical ordering (当然与 f.ex.“插入顺序”无关) - 你的问题的“之后”意味着你想要一些行排序。但是在 PostgreSQL 中,没有默认排序(事实上,所有其他 RDBMS 也缺少默认排序,有些只是有一个 de facto 排序,仍然不应该依赖它)。 简而言之:如果你有事情要ORDER BY,你的任务就是微不足道的,如果你没有这样的事情,你根本解决不了。

标签: postgresql


【解决方案1】:

试试这个

SELECT d1.* FROM
(SELECT Row_Number() over (order by id) AS RowIndex, * from tableName ) AS d1 
INNER JOIN 
(SELECT Row_Number() over (order by id) AS RowIndex, * from tableName) AS d2 
ON (d2.uuid  = '8c4bf1b8-7477-42e4-affb-31bafa8648f1' and d1.RowIndex > d2.RowIndex)

希望你有主键!!

如果你没有主键

SELECT d1.* FROM
(SELECT Row_Number() over (order by (select null)) AS RowIndex, * from tableName) AS d1 
INNER JOIN 
(SELECT Row_Number() over (order by (select null)) AS RowIndex, * from tableName) AS d2 
ON (d2.uuid  = '8c4bf1b8-7477-42e4-affb-31bafa8648f1' and d1.RowIndex > d2.RowIndex)

【讨论】:

  • 如果他有英国身份证,请询问 OP,否则您的答案将无效
最近更新 更多