SQL输入日期范围计算出每日费率

时间:2018-02-13 18:45:01

标签: 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     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

然后,我需要在后面的步骤中对速率求和以产生总数。

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

2 个答案:

答案 0 :(得分:0)

一个非常简单的方法是递归CTE和apply

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

肯定有其他方法。默认情况下,这将在长达100天的范围内工作(您可以使用最大递归选项获得更多)。

如果您有更多数据,某种数字表会有所帮助。

答案 1 :(得分:0)

这是我最终用来获得所需结果的T-SQL。感谢Gordon让我走上正轨。

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;