SQL输入日期范围以计算每天的费率

SQL输入日期范围以计算每天的费率,sql,sql-server,tsql,Sql,Sql Server,Tsql,您好,有谁能帮助我进行T-SQL查询,根据以下两个表生成每日费率: 我有一个包含范围的表: FromDate | ToDate 2017-06-20 2017-07-01 以及一个包含费率的表。该表不限于2条记录: FromDate | Rate 2017-06-11 400 2017-06-24 1200 根据第一个表中的范围,我需要生成一个结果集,如下所示,返回输入范围内每个日期的速率: Date | Rate 2017-06-20

您好,有谁能帮助我进行T-SQL查询,根据以下两个表生成每日费率:

我有一个包含范围的表:

FromDate   | ToDate
2017-06-20   2017-07-01
以及一个包含费率的表。该表不限于2条记录:

FromDate     | Rate
2017-06-11     400  
2017-06-24     1200
根据第一个表中的范围,我需要生成一个结果集,如下所示,返回输入范围内每个日期的速率:

Date        |  Rate
2017-06-20     400
2017-06-21     400
2017-06-22     400
2017-06-23     400
2017-06-24     1200
2017-06-25     1200
2017-06-26     1200
2017-06-27     1200
2017-06-28     1200
2017-06-29     1200
2017-06-30     1200
2017-07-01     1200
然后,我需要在后面的步骤中对比率求和,以生成一个总数


非常感谢您提供的任何帮助。

一个非常简单的方法是递归CTE并应用:

肯定还有其他办法。这将适用于长达100天的范围。默认情况下,您可以使用“最大递归”选项获取更多


如果您有更多数据,某种类型的数字表会很有帮助。

这是我最后用来获得所需结果的T-SQL。谢谢戈登让我走上正轨

with cte as (
  select fromdate as dte, todate
  from Table1
  union all
  select dateadd(day, 1, dte), todate
  from cte where dte < todate
 )
select dte, t2.rate
from cte cross apply
 (select top 1 t2.rate
  from Table2 t2
  where t2.fromdate <= cte.dte
  order by t2.fromdate desc
 ) t2;

谢谢你让我走对了路。我不得不稍微修改一下这个问题,但我现在得到了预期的结果。如果有一些小错误,你应该编辑他的答案,而不是发布新的答案。。。
with cte as (
  select fromdate as dte, todate
  from Table1
  union all
  select dateadd(day, 1, dte), todate
  from cte where dte < todate
 )
select dte, t2.rate
from cte cross apply
 (select top 1 t2.rate
  from Table2 t2
  where t2.fromdate <= cte.dte
  order by t2.fromdate desc
 ) t2;