大家可以根据以下两个表格帮助我每天产生费率所需的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
然后,我需要在后面的步骤中对速率求和以产生总数。
我非常感谢您提供的任何帮助。
答案 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;