我有一个表格,其中包含给定日期的信息。我有第二张表,其中包含某些日期的附加信息。不幸的是,第二个表没有第一个表中每个日期的信息。
现在,我希望能够使用第二个表中的信息加入我的第一个表,但是当第二个表中缺少其他信息时,我想将其与之前日期或之前的日期信息一起加入那个,最多可以说是7天。
我不知道如何在没有带有max()函数的subselect的情况下解决这个问题,而max()函数的性能非常糟糕。
我会尝试用一个简单的例子说明我的问题:
create table lookups
(
date_value date not null,
additional_information nvarchar(10)
)
create table master
(
date_value date not null,
information nvarchar(10)
)
insert into master(date_value, information)
values (convert(date, '20160101', 112), 'one');
insert into master(date_value, information)
values (convert(date, '20160102', 112), 'two');
insert into master(date_value, information)
values (convert(date, '20160104', 112), 'three');
insert into master(date_value, information)
values (convert(date, '20160112', 112), 'three');
insert into lookups(date_value, additional_information)
values (convert(date, '20160101', 112), 'plus ONE');
insert into lookups(date_value, additional_information)
values (convert(date, '20160102', 112), 'plus TWO');
现在,为了获得更多信息,我目前正在采取以下措施:
SELECT *
FROM master
SELECT *
FROM lookups
SELECT
*,
(SELECT additional_information
FROM lookups
WHERE date_value = (SELECT MAX(date_value)
FROM lookups
WHERE date_value <= master.date_value
AND date_value >= dateadd(d, -10, master.date_value))
)
FROM master
我得到了
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的解决方案。
答案 0 :(得分:0)
我可能错了,但如果您只是想从查找中获取最近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))