Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server 从单列控制表(SQL Server)执行日期范围查询_Sql Server_Datetime_Select - Fatal编程技术网

Sql server 从单列控制表(SQL Server)执行日期范围查询

Sql 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

假设我有以下表格

表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      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是报表事务。我会想办法解决我该怎么做。再次感谢你的帮助!!哦,日期不能保证是每月一次。我贴了一个误导性的例子。哦,日期不能保证是每月一次。我发布了一个误导性的例子