Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL与缺少行的表联接_Sql_Sql Server_Oracle_Left Join - Fatal编程技术网

SQL与缺少行的表联接

SQL与缺少行的表联接,sql,sql-server,oracle,left-join,Sql,Sql Server,Oracle,Left Join,我有一个表,其中包含给定日期的信息。我还有第二张桌子,里面有一些日期的附加信息。不幸的是,第二个表没有第一个表中每个日期的信息 现在,我希望能够将我的第一个表与第二个表中的信息连接起来,但是每当第二个表中缺少额外的信息时,我希望将它与前一个日期或前一个日期的信息连接起来,最多7天 我不知道如何解决这个问题,而不使用带有max函数的subselect,因为它的性能非常差 我将尝试用一个简单的例子来说明我的问题: 创建表查找 日期\值日期不为空, 附加信息nvarchar10 创建表格主控形状 日期

我有一个表,其中包含给定日期的信息。我还有第二张桌子,里面有一些日期的附加信息。不幸的是,第二个表没有第一个表中每个日期的信息

现在,我希望能够将我的第一个表与第二个表中的信息连接起来,但是每当第二个表中缺少额外的信息时,我希望将它与前一个日期或前一个日期的信息连接起来,最多7天

我不知道如何解决这个问题,而不使用带有max函数的subselect,因为它的性能非常差

我将尝试用一个简单的例子来说明我的问题:

创建表查找 日期\值日期不为空, 附加信息nvarchar10 创建表格主控形状 日期\值日期不为空, 信息nvarchar10 在masterdate_值中插入信息 日期为'20160101',日期为'112',日期为'1'; 在masterdate_值中插入信息 日期为'20160102',日期为'112',日期为'2'; 在masterdate_值中插入信息 日期'20160104',112',三'; 在masterdate_值中插入信息 日期为'20160112',日期为'112',日期为'3'; 在LookupDate_值中插入其他_信息 日期'20160101',112'加一'; 在LookupDate_值中插入其他_信息 日期'20160102',112',加上两个'; 现在,为了获得更多信息,我目前做了以下几点:

挑选* 从主人那里 挑选* 从查找 选择 *, 选择其他信息 从查找 其中日期\值=选择最大日期\值 从查找 其中date_值=dateaddd,-10,master.date_值 从主人那里 我得到

date_value information
---------- -----------
2016-01-01 one
2016-01-02 two
2016-01-04 three
2016-01-12 three

(4 row(s) affected)

date_value additional_information
---------- ----------------------
2016-01-01 plus ONE
2016-01-02 plus TWO

date_value information 
---------- ----------- ----------
2016-01-01 one         plus ONE
2016-01-02 two         plus TWO
2016-01-04 three       plus TWO
我希望你们中的一些人能帮助我找到一个更优雅、更重要、更快的解决方案


虽然这个例子是在SQL Server上,但实际上我正在寻找一个同样适用于Oracle的解决方案。

我可能错了,但是如果您只是想从查找中获取过去7天的数据,为什么不写下面的内容呢

select * 
from master m 
left outer join lookups l on nvl(m.date_value,'null') =  nvl   (l.date_value,'null')
where  (TRUNC(SYSDATE - 7) <= (l.date_value)) 

您只是想从查找表中获取过去7天的数据吗?你就不能在where子句中这样做吗?你为什么需要max?类似于TRUNCSYSDATE-7