如何获取id的先前条目

时间:2017-05-29 04:00:15

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

由于表格很大,我不想对整个表格进行排序并按ID过滤,然后获取之前的ID。是否有任何有效的方法?

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用Postgres的LAG()分析函数,并在time列上使用它。下面的CTE为每条记录分配time的滞后。然后,我们可以选择您想要的先前值的记录,它应该已经存在于结果集中。请注意,CTE使用WHERE 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

按照以下链接进行正在运行的演示:

Rextester

答案 1 :(得分:1)

我认为添加另一列previous_entry_no的最简单方法是明确包含先前的条目编号,并且可以提取。

此方法的缺点:您需要一个额外的列,在每次插入之前,您需要执行其他查询以查找给定entry_no的最新id