java如何获取id的前面条目
我在postgresql中有一个数据库表,如下所示
entry_no id time
________ ____ ______
1 1 2017-03-21 00:12:10
2 2 2017-03-21 00:12:18
3 3 2017-03-21 00:12:56
4 2 2017-03-21 10:25:34
5 1 2017-03-21 11:09:10
6 2 2017-03-21 11:21:39
7 3 2017-03-21 12:19:19
8 3 2017-03-21 12:29:19
9 1 2017-03-21 12:39:10
10 1 2017-03-21 12:39:10
我有一个Java程序,它必须检测id的前一个条目。例如,如果该条目是id 2
6 2 2017-03-21 11:21:39
从这个条目中,我需要获取相应id的上一个条目,即
4 2 2017-03-21 10:25:34
条目号是主键。因此,如果我能找到条目_no,它将足够快地找到相应id的前一个条目
由于这个表很大,我不想对整个表进行排序,并按id进行筛选,然后得到以前的id。有什么有效的方法吗
感谢您的帮助
# 1 楼答案
我认为最简单的方法是添加另一列
previous_entry_no
,该列显然包含前面的条目号,您可以提取它这种方法的缺点是:您需要一个额外的列,在每次插入之前,您需要执行一个额外的查询来查找给定
id
的最新entry_no
# 2 楼答案
您可以尝试使用Postgres'
LAG()
分析函数,并在time
列上使用它。下面的CTE将time
的延迟分配给每个记录。然后,我们可以选择您想要其先前值的记录,并且它应该已经存在于结果集中。注意,CTE使用WHERE id = 2
来确保我们仅为该记录块适当地分配滞后时间请按照以下链接进行运行演示:
Rextester