Sql 根据当前行获取第一个
Oracle数据库中有三个表,例如Sql 根据当前行获取第一个,sql,oracle,join,Sql,Oracle,Join,Oracle数据库中有三个表,例如设备类型,输出历史,以及时间历史。如何连接三个表,如下所示? (数据库管理系统:Oracle) 请注意,在output\u history中的DATE1'20180103'处,time\u history中的DATE2'20180101'是最近的一个 --equip_type table and the date CREATE TABLE equip_type ( EQUIP_TYPE VARCHAR(60), EQUIP VARCHAR(
设备类型
,输出历史
,以及时间历史
。如何连接三个表,如下所示?
(数据库管理系统:Oracle)
请注意,在output\u history
中的DATE1
'20180103'
处,time\u history
中的DATE2
'20180101'
是最近的一个
--equip_type table and the date
CREATE TABLE equip_type (
EQUIP_TYPE VARCHAR(60),
EQUIP VARCHAR(60)
);
INSERT INTO equip_type VALUES ('A','e1');
-- output_history and data
CREATE TABLE output_history (
EQUIP VARCHAR(60),
MODEL VARCHAR(60),
Data1 VARCHAR(60),
QUANTITY NUMBER(10)
);
INSERT INTO output_history VALUES ('e1','m1','20180103',10);
INSERT INTO output_history VALUES ('e1','m1','20180106',20);
--time_history table and data
CREATE TABLE time_history (
EQUIP VARCHAR(60),
MODEL VARCHAR(60),
Data2 VARCHAR(60),
time NUMBER(10)
);
INSERT INTO time_history VALUES ('e1','m1','20180101',6);
INSERT INTO time_history VALUES ('e1','m1','20180105',5);
在output\u history
中的DATE1
'20180106'
处,time\u history
中的'DATE2 20180105'
是最近的一个
--equip_type table and the date
CREATE TABLE equip_type (
EQUIP_TYPE VARCHAR(60),
EQUIP VARCHAR(60)
);
INSERT INTO equip_type VALUES ('A','e1');
-- output_history and data
CREATE TABLE output_history (
EQUIP VARCHAR(60),
MODEL VARCHAR(60),
Data1 VARCHAR(60),
QUANTITY NUMBER(10)
);
INSERT INTO output_history VALUES ('e1','m1','20180103',10);
INSERT INTO output_history VALUES ('e1','m1','20180106',20);
--time_history table and data
CREATE TABLE time_history (
EQUIP VARCHAR(60),
MODEL VARCHAR(60),
Data2 VARCHAR(60),
time NUMBER(10)
);
INSERT INTO time_history VALUES ('e1','m1','20180101',6);
INSERT INTO time_history VALUES ('e1','m1','20180105',5);
您可以使用具有
不存在
条件的相关子查询来选择时间\u历史
中最近的相关记录
我在中测试了MySQL上的以下查询。您没有标记正在使用的RDBMS。我在MySQL上进行了测试,但这是适用于大多数RDBMS的标准SQL
SELECT
o.equip,
o.model,
o.data1,
o.quantity,
t.data2,
t.time,
e.equip_type
FROM
output_history o
INNER JOIN equip_type e ON e.equip = o.equip
INNER JOIN time_history t ON t.equip = o.equip AND t.data2 <= o.data1
WHERE NOT EXISTS (
SELECT 1
FROM time_history
WHERE
equip = o.equip
AND data2 <= o.data1
AND data2 > t.data2
)
选择
o、 装备,
o、 模型,
o、 数据1,
o、 数量,
t、 数据2,
t、 时间,,
e、 装备型
从…起
输出_历史o
e.Equipment=o.Equipment上的e型内部连接设备
t.Equipm=o.Equipm和t.data2上的内部连接时间\U历史t使用哪个dbms?“在输出\U历史中日期1'20180103'处,时间\U历史中日期2'20180101'是最近的一个”不清楚。您没有清楚地解释输入应该包含哪些输出。我使用Oracle dbms谢谢您的回答