Sql 根据当前行获取第一个

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数据库中有三个表,例如
设备类型
输出历史
,以及
时间历史
。如何连接三个表,如下所示? (数据库管理系统: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谢谢您的回答