我有一张表,其中每个都有一个与之相关联的日期.如果我有一个日期与一个项目相关联,我如何使用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用于面向集合的操作而不是迭代操作更为有用.