有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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。有什么有效的方法吗

感谢您的帮助


共 (2) 个答案

  1. # 1 楼答案

    我认为最简单的方法是添加另一列previous_entry_no,该列显然包含前面的条目号,您可以提取它

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

  2. # 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