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

时间:2016-12-15 09:57:10

标签: 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查询以获得所需的结果。

2 个答案:

答案 0 :(得分:2)

您可以使用分层查询来实现该目标。

请参阅https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm

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

然后,您可以使用上述查询作为另一个查询的源来检索最早的记录。

答案 1 :(得分:2)

使用SELECT * FROM MOBILE_DEVICE WHERE CONNECT_BY_ISLEAF = 1 START WITH imei = '1004' CONNECT BY PRIOR imei = old_imei 的分层查询来获取最后一个条目:

NULL

或者,根据您的数据,您只需过滤old_imei中的SELECT * FROM MOBILE_DEVICE WHERE old_imei IS NULL START WITH imei = '1004' CONNECT BY PRIOR imei = old_imei 值:

{{1}}