假设我有以下表格
TABLEA
seq datea
1 2010-01-01
2 2010-02-01
3 2010-03-01
表B
dateb sthvalue
2010-01-11 AAA
2010-01-12 AAB
2010-02-03 CCC
2010-02-06 CCD
2010-02-10 CCE
2010-03-05 FFF
我想加入tableb.dateb
上的两个表位于tablea
的日期范围内
即。输出应该是
seq datea dateb sthvalue
1 2010-01-01 2010-01-11 AAA
1 2010-01-01 2010-01-12 AAB
2 2010-02-01 2010-02-03 CCC
2 2010-02-01 2010-02-06 CCD
2 2010-02-01 2010-02-10 CCE
3 2010-03-01 2010-03-05 FFF
非常感谢您的帮助!
答案 0 :(得分:1)
我相信你要求的是加入年月和月份
select
seq,datea,dateb,sthvalue
from
TableA inner join Tableb
on datepart(year,datea) = datepart(year,dateb) and
datepart(month,datea) = datepart(month,dateb)
order by seq,dateb
答案 1 :(得分:1)
假设表A的值总是相隔一个月并且在每个月的第1天设置,那么现有答案就可以了。
如果您的表A可以包含更多种类:
SELECT
*
FROM
TableB b
inner join
TableA a
on
b.dateb >= a.datea
left join
TableA a_nolater
on
a_nolater.datea > a.datea and
b.dateb >= a_nolater.datea
WHERE
a_nolater.seq is null
这将两个表连接在一起,然后尝试找到一个“更好”的连接(tablea中的一行比当前匹配的一个更晚,并且仍然是tableb的匹配)。它只返回无法找到“更好”连接的行。因此,它在tableA中找到最新的日期行,该行在tableB的日期之前或之前。
答案 2 :(得分:0)
你可以
select
a.seq,
a.datea,
b.dateb,
b.sthvalue
from
tablea a inner join tableb b on (b.dateb >= a.datea and b.dateb < dateadd(month, 1, a.datea))
order by
a.seq, b.sthvalue