表中的“下一个”和“上一个”的SQL是什么?

我有一张表,其中每个都有一个与之相关联的日期.如果我有一个日期与一个项目相关联,我如何使用SQL查询数据库以获得表中的“先前”和“后续”项目?

不可能简单地添加(或减)值,因为日期之间没有规则的差距.

一个可能的应用程序将是相册或博客Web应用程序中的“上一个/下一个链接,其中底层数据在sql表中.

我认为有两种可能的情况:

首先,每个日期是唯一的:

样品数据:

1,3,8,19,67,45

当提供8作为参数时,什么查询(或查询)将给出3和19? (或行3,19).请注意,并不总是返回三行 – 在序列的末尾将丢失一行.

其次,如果有一个单独的唯一键来排序元素,什么是查询返回集合’周围’一个日期?预期的顺序是按日期然后键.

样品数据:

(key:date) 1:1,2:3,3:8,4:8,5:19,10:19,11:67,15:45,16:8

‘8’的查询返回集合:

2:3,16:8,5:19

或什么查询生成表:

key date prev-key next-key
1   1    null     2
2   3    1        3
3   8    2        4
4   8    3        16
5   19   16       10
10  19   5        11
11  67   10       15
15  45   11       null
16  8    4        5

表格顺序不重要 – 只是下一个键和上一个键字段.

TheSoftwareJedi和Cade Roux都有解决方案,适用于我昨天发布的数据集.对于第二个问题,这两个数据集似乎都失败了:

(key:date) 1:1,16:8

预期的顺序是按日期然后键,所以一个预期的结果可能是:

2:3,5:19

一个

key date prev-key next-key
1   1    null     2
2   3    1        3
3   8    2        4
4   8    3        16
5   19   16       10
10  19   5        11
11  67   10       15
15  45   11       null
16  8    4        5

表格顺序不重要 – 只是下一个键和上一个键字段.

解决方法

选择max(element)从Data Where Element < 8 联盟 选择min(element)从Data Where Element> 8

但是一般来说,将sql用于面向集合的操作而不是迭代操作更为有用.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...