日期范围内的 SQL 分割数

2024-02-14

我有一个表,例如这个数据

ID |start_date  |end_date   |amount
---|------------|-----------|-------
a1 |2013-12-01  |2014-03-31 |100

我想要一个分割日期的查询,这样我就可以将全年的金额分割出来,如下所示:

ID |org_start_date  |org_end_date   |new_start_date  |new_end_date    |amount
---|----------------|---------------|----------------|----------------|-------
a1 |2013-12-01      |2014-03-31     |2013-12-01      |2013-12-31      |25
a1 |2013-12-01      |2014-03-31     |2014-01-01      |2014-03-31      |75

2013年的25是因为2013年有1个月,2014年的75是因为2013年有3个月

有没有办法在 T-SQL 中做到这一点?

提前谢谢!


Use spt_values表创建日历表,然后连接到您的表以将日期范围拆分为您想要的任何部分。

如果按年份划分并将金额除以月份,您可以:

with dates as
(
select number,DATEADD(day,number,'20130101') as dt
    from master..spt_values
    where number between 0 and 1000 AND TYPE='P'
)
select
    m.start_date as org_start_date,
    m.end_date as org_end_date,
    min(d.dt) as new_start_date,
    max(d.dt) as new_end_date,
    m.amount*count(distinct month(d.dt))/(datediff(month,m.start_date,m.end_date)+1) as amount
from 
    MonthSplit m
join
    dates d
on 
    d.dt between m.start_date and m.end_date
group by 
    m.start_date, m.end_date, year(d.dt),m.amount

这里是SQL FIDDLE 演示 http://sqlfiddle.com/#!6/ae78a/2/0.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

日期范围内的 SQL 分割数 的相关文章

随机推荐