从两个不同的表中获取过期日期和生效日期之间的日期的SQL查询

从两个不同的表中获取过期日期和生效日期之间的日期的SQL查询,sql,Sql,我在查询这两个表时遇到了这个问题,这两个表之间没有任何链接,我正在尝试合并。表1的生效日期和失效日期必须与PollDate的表2相关联。PollDate不能介于生效日期和到期日期之间 Table 1 ClientID EffectiveDate ExpirationDate 1 2009-04-01 00:00:00.000 2009-12-18 00:00:00.000 1 2010-02-12 00:00:00.000 2010-03-05 00:0

我在查询这两个表时遇到了这个问题,这两个表之间没有任何链接,我正在尝试合并。表1的生效日期和失效日期必须与PollDate的表2相关联。PollDate不能介于生效日期和到期日期之间

Table 1
ClientID    EffectiveDate       ExpirationDate
1       2009-04-01 00:00:00.000 2009-12-18 00:00:00.000
1       2010-02-12 00:00:00.000 2010-03-05 00:00:00.000
1       2010-05-18 00:00:00.000 NULL
1       2009-12-21 00:00:00.000 2010-02-08 00:00:00.000
1       2010-12-19 00:00:00.000 2009-12-20 00:00:00.000

Table 2
ClientID    PollDate
1       2009-12-20 00:00:00.000
1       2009-12-19 00:00:00.000
1       2010-02-12 00:00:00.000
1       2010-02-27 00:00:00.000
1       2010-05-19 00:00:00.000
1       2010-05-29 00:00:00.000
1       2010-05-30 00:00:00.000
1       2010-05-31 00:00:00.000
1       2010-06-05 00:00:00.000
1       2010-06-25 00:00:00.000
1       2010-06-27 00:00:00.000
1       2010-07-02 00:00:00.000
1       2010-08-04 00:00:00.000
1       2010-08-20 00:00:00.000

Result
ClientID    inValidDate
1       2009-12-20 00:00:00.000
1       2009-12-19 00:00:00.000    

不确定syntext,但你想做这样的事情

select clientID, polDate as 'inValidDate'
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.PolDate not in between t1.EffectiveDate and t1.ExpirationDate
编辑: 假设过期日期为空,则表示策略永远不会过期

select clientID, polDate as 'inValidDate'
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.PolDate not in between t1.EffectiveDate and ISNULL(t1.ExpirationDate, '2999-01-01')

不确定syntext,但你想做这样的事情

select clientID, polDate as 'inValidDate'
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.PolDate not in between t1.EffectiveDate and t1.ExpirationDate
编辑: 假设过期日期为空,则表示策略永远不会过期

select clientID, polDate as 'inValidDate'
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.PolDate not in between t1.EffectiveDate and ISNULL(t1.ExpirationDate, '2999-01-01')
你能试试吗

select t2.ClientID, t2.PoolDate
from Table1 t1, Table2 t2
where t2.PollDate between t1.EffectiveDate and t1.ExpirationDate
因为您没有放入联接条件,表1的每一行都将与表2的每一行相匹配

select t2.ClientID, t2.PoolDate
from Table1 t1, Table2 t2
where t2.PollDate between t1.EffectiveDate and t1.ExpirationDate

因为u没有加入连接条件,所以表1的每一行都将与表2的每一行相匹配。下面是@AJP结果的一个细微变化-只考虑ExpirationDate中的空值:


以下是@AJP结果的一个细微变化-仅考虑ExpirationDate中的空值:


我想他说过,有效期不能介于有效期和失效期之间。你的查询结果不是介于两者之间吗?但是问题的样本结果显示无效日期我想他说了PollDate不能介于有效日期和过期日期之间。你的查询结果不是介于两者之间吗?但是问题的示例结果显示无效日期如果你想在ExpirationDate中包含所有空值,你可以使用t2。[PollDate]>ISNULLt1。[ExpirationDate],“1753-01-01”代替感谢diaho,这是你需要的。您的查询将生成有效日期和过期日期内的所有匹配pollDate列表。我需要添加的是它们都为null的位置,因此排除不在这两个日期之间的PollDate。如果要在ExpirationDate中包含所有null值,可以使用t2。[PollDate]>ISNULLt1。[ExpirationDate],“1753-01-01”代替感谢diaho,这就是需要的。您的查询将生成有效日期和过期日期内的所有匹配pollDate列表。我需要添加的是它们都是空的,所以排除不在两个日期之间的PollDates。。它们之间没有任何链接。它们是否不在同一数据库中?您正在寻找某种RPC选项吗?没有。。它们在同一个数据库中。我所说的链接是指两个表之间没有任何引用,即:外键。两个表的共同优势是clientID。有点被..弄糊涂了。。它们之间没有任何链接。它们是否不在同一数据库中?您正在寻找某种RPC选项吗?没有。。它们在同一个数据库中。我所说的链接是指两个表之间没有任何引用,即:外键。两个表的共同优势是clientID。