【发布时间】:2017-01-03 12:47:39
【问题描述】:
我有一个表 foos (id,fieldA,fieldB,fieldC...)。我有一个 sql 查询,它返回我一些行
SELECT * from foos WHERE whereClauseN ORDER BY orderClauseM
现在,我需要从这个集合中选择 5 行 id X:
- 如果id为X的行在集合的前5行,则必须返回集合的前5行。
- 如果 id X 的行在集合的最后 5 行,则必须返回集合的最后 5 行。
- 如果 ID 为 X 的行不在前 5 行中,也不在后 5 行中,则必须返回 ID 为 X 的行和 X 行之前的 2 行和 X 行之后的 2 行。
如何进行这样的sql查询(我需要H2和PostgreSql)?
例如,如果我在执行上述 sql 代码后有以下设置(为简单起见仅显示 fieldA):
| id | fieldA |
_______________
| 5 | aaaaa |
| 7 | bbbbb |
| 23 | tttttt |
| 22 | ssssss |
| 12 | rrrrrr |
| 96 | eeeeee |
| 48 | qqqqqq |
| 3 | wwwwww |
_______________
对于 X = 7 的情况 1,必须返回以下集合:
| id | fieldA |
_______________
| 5 | aaaaa |
| 7 | bbbbb |
| 23 | tttttt |
| 22 | ssssss |
| 12 | rrrrrr |
_______________
对于 X = 96 的情况 2,必须返回以下集合:
| id | fieldA |
_______________
| 22 | ssssss |
| 12 | rrrrrr |
| 96 | eeeeee |
| 48 | qqqqqq |
| 3 | wwwwww |
_______________
对于 X = 12 的情况 3,必须返回以下集合:
| id | fieldA |
_______________
| 23 | tttttt |
| 22 | ssssss |
| 12 | rrrrrr |
| 96 | eeeeee |
| 48 | qqqqqq |
_______________
【问题讨论】:
-
请用您正在使用的数据库标记您的问题。
-
@Gordon Linoff 我编辑了问题
-
edit 您的问题并添加一些示例数据和基于该数据的预期输出。 Formatted text 请no screen shots
-
什么决定了第一个和最后一个?
-
@a_horse_with_no_name 我编辑了
标签: sql postgresql h2