我正在尝试根据 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/