我有两个表(表1和表2):
表1
Date Name Other
2014-02-08 Alex 1
2014-06-15 Bob 1
表2
Date Name Count
2014-02-07 Alex 1
2014-01-31 Alex 2
2014-02-09 Alex 4
2014-02-08 Alex 10
2014-02-10 Alex 0
2014-02-01 Alex 4
2014-01-08 Alex 5
2014-03-08 Alex 4
2014-06-01 Bob 22
2014-06-02 Bob 0
2014-06-10 Bob 9
2014-06-15 Bob 3
2014-06-16 Bob 3
2014-06-20 Bob 5
2014-06-14 Bob 18
2014-07-11 Bob 1
2014-08-15 Bob 2
我很难构建一个完成以下任务的查询:
因此,对于Table1,“Alex”在“2014-02-08”上,我想抓住Table2中所有也说“Alex”的行,但其日期在“2014-01-29”之间(10天前) 2014-02-08)和“2014-02-13”(2014-02-08之后的5天)。
对于“2014-06-15”中的“Bob”,我想抓住Table2中所有也说“Bob”的行,但其日期在“2014-06-05”之间(2014-06-之前的10天) 15)和“2014-06-20”(2014-06-15之后的5天)。
预期输出为:
Date Name Count
2014-02-07 Alex 1
2014-01-31 Alex 2
2014-02-09 Alex 4
2014-02-08 Alex 10
2014-02-10 Alex 0
2014-02-01 Alex 4
2014-06-10 Bob 9
2014-06-15 Bob 3
2014-06-16 Bob 3
2014-06-20 Bob 5
2014-06-14 Bob 18
在我的实际工作中,Table1中的行数要大得多,而且我想在参考日期之前/之后获取的天数可能会有所不同。
答案 0 :(得分:0)
我认为你可以这样做:
select t2.*
from table1 t2
where exists (select 1
from table1 t1
where t1.name = t2.name and t1.date >= t2.date - 'interval 10 day' and
t1.date <= t2.date + 'interval 10 day'
);
答案 1 :(得分:0)
请参阅:
http://sqlfiddle.com/#!4/82e1e/10
假设甲骨文,但你得到了图片:-)。您需要在结果中格式化日期。这留给你细读。
如果上面的链接无法打开,则sql为:
select t2.*
from
table2 t2, table1 t1
where
t1.name = t2.name
and t2.date1 > t1.date1 -10
and t2.date1 <= t1.date1 +5;
结果是:
DATE1 NAME COUNT
February, 07 2014 00:00:00+0000 Alex 1
January, 31 2014 00:00:00+0000 Alex 2
February, 09 2014 00:00:00+0000 Alex 4
February, 08 2014 00:00:00+0000 Alex 10
February, 10 2014 00:00:00+0000 Alex 0
February, 01 2014 00:00:00+0000 Alex 4
June, 10 2014 00:00:00+0000 Bob 9
June, 15 2014 00:00:00+0000 Bob 3
June, 16 2014 00:00:00+0000 Bob 3
June, 20 2014 00:00:00+0000 Bob 5
June, 14 2014 00:00:00+0000 Bob 18