Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取id的先前条目_Java_Database_Postgresql - Fatal编程技术网

Java 如何获取id的先前条目

Java 如何获取id的先前条目,java,database,postgresql,Java,Database,Postgresql,我在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

我在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
条目号是一个主键。因此,如果我能找到条目号,它将足够快地找到相应id的前一个条目

由于这个表很大,我不想对整个表进行排序,并按id进行筛选,然后得到以前的id。有什么有效的方法吗


非常感谢您的帮助。

我认为最简单的方法是添加另一列
previous\u entry\u no
,该列显然包含前面的条目编号,您可以提取该编号


这种方法的缺点是:您需要一个额外的列,在每次插入之前,您需要执行一个额外的查询,以查找给定
id

的最新
条目号
,您可以尝试使用Postgres的
LAG()
分析函数,并在
time
列上使用它。下面的CTE为每条记录分配
时间的滞后。然后,我们可以选择您想要其先前值的记录,并且它应该已经存在于结果集中。注意,CTE使用
其中id=2
来确保我们仅为该记录块适当地分配滞后时间

WITH cte AS (
    SELECT entry_no, id, time,
           LAG(time) OVER (ORDER BY time) lag_time
    FROM yourTable
    WHERE id = 2
)
SELECT *
FROM cte
WHERE entry_no = 6
请按照以下链接进行运行演示:


您选择id为
2
的第一条记录的逻辑是什么?这是最近的记录,还是您使用了其他逻辑?实际上数据库表太大了(以十亿计)。因此,添加另一个数据库实际上并不容易column@Ricky,我明白了。然后您可能可以尝试使用比较时间列中的记录。我尝试了您的sql,但它没有响应滞后时间。我不明白为什么它不返回滞后时间_time@Ricky我为你设置了一个Postgres演示。我建议你仔细研究一下,看看你会错在哪里。很抱歉,我在id和条目号上犯了一个错误。谢谢你的帮忙。但正如我所说的,桌子很大,每一张唱片都要花很多时间。无论如何,要让它更快