sql - 使用数据库中的新记录详细信息查找最旧的记录

标签 sql oracle

我正在尝试根据 Oracle 数据库中的最新设备详细信息查找最旧的设备详细信息。 我所拥有的都在下面

表:

CREATE TABLE MOBILE_DEVICE (
        IMEI    VARCHAR2(50),
        EFFECTIVE_DATE  DATE,
        EXPIRATION_DATE DATE,
        OLD_IMEI        VARCHAR2(50),
        DEVICE_STATUS   CHAR(1));

记录如下

IMEI    EFFECTIVE_DATE  EXPIRATION_DATE OLD_IMEI    DEVICE_STATUS
1004    4/1/2016        12/31/3000      1003        A
1003    3/1/2016        4/1/2016        1002        C
1002    2/1/2016        3/1/2016        1001        C
1001    1/1/2016        2/1/2016                    C
2001    1/1/2016        2/1/2016                    C
2002    2/1/2016        3/1/2016        2001        C
2003    3/1/2016        12/31/3000      2002        A

现在我想检索更新后的设备 1004(即 1001)的最旧记录。我正在尝试使用 SQL,但无法获得完美的查询来实现我的结果。 (这里IMEI是varchar;根据需要假设IMEI有时可以是字符串。因此按IMEI排序不是必需的)

请帮助我找到正确的 SQL 查询以获得所需的结果。

最佳答案

使用带有 CONNECT_BY_ISLEAF = 1 的分层查询来获取最后一个条目:

SELECT *
FROM   MOBILE_DEVICE
WHERE  CONNECT_BY_ISLEAF = 1
START WITH imei = '1004'
CONNECT BY PRIOR imei = old_imei

或者,根据您的数据,您可以仅过滤 old_imei 中的 NULL 值:

SELECT *
FROM   MOBILE_DEVICE
WHERE  old_imei IS NULL
START WITH imei = '1004'
CONNECT BY PRIOR imei = old_imei

关于sql - 使用数据库中的新记录详细信息查找最旧的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41161217/

相关文章:

mysql - 在 GROUP_CONCAT 中搜索

oracle - 字符集是来自用户还是数据库?

sql - 如何在 Oracle 动态 SQL 中转义 ":"并且还有绑定(bind)变量?

java - Grails -- PooledConnection 已经关闭

oracle - PL/SQL异常处理

sql - Oracle 10 中的本地临时表(用于存储过程的范围)

mysql - SQL - EXISTS 和 NOT EXISTS 不等式

sql - 两个表之间最近点的唯一分配

C++ Borland Builder 6 SQL 查询

java如何解析选定的sql行以将值获取到xml