Sql server 从单列控制表(SQL Server)执行日期范围查询
假设我有以下表格 表aSql server 从单列控制表(SQL Server)执行日期范围查询,sql-server,datetime,select,Sql Server,Datetime,Select,假设我有以下表格 表a 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 i、 e.产出应为: seq datea dateb st
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
i、 e.产出应为:
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
非常感谢你的帮助 我相信你所要求的是年复一年地加入
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
你可以
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
选择
a、 如下:,
a、 datea,
b、 达特布,
b、 STH值
从…起
tablea a内部联接tableb on(b.dateb>=a.datea和b.dateb
假设表A的值总是相隔一个月,并设置在每个月的第一天,现有答案就可以了
如果表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
这将两个表连接在一起,然后尝试找到一个“更好的”连接(表a中的一行出现的时间晚于当前匹配的一行,并且仍然与表B匹配)。它只返回找不到此“更好”联接的行。因此,它可以在表A中找到表B中日期当天或之前的最新日期行。您应该指定您所说的“范围”在同一个月、同一年等的含义。非常感谢您的回答!但我必须先将表加入seq tableA,然后加入tableB,因为tableA是月度报表,tableB是报表事务。我会想办法解决我该怎么做。再次感谢你的帮助!!哦,日期不能保证是每月一次。我贴了一个误导性的例子。哦,日期不能保证是每月一次。我发布了一个误导性的例子