我正在尝试根据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查询以获得所需的结果。
答案 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}}