gpt4 book ai didi

sql - 根据日期范围汇总每月的天数

转载 作者:行者123 更新时间:2023-12-04 17:57:40 24 4
gpt4 key购买 nike

作为主要的 C# 开发人员,当我试图创建一个基于纯 T-SQL 的解决方案来解决一个问题时,我正在挠头,该解决方案涉及在给定一组日期范围的情况下汇总天/月。

我有一组看起来像这样的数据:

UserID  Department  StartDate   EndDate
====== ========== ========== ==========
1 A 2011-01-02 2011-01-05
1 A 2011-01-20 2011-01-25
1 A 2011-02-25 2011-03-05
1 B 2011-01-21 2011-01-22
2 A 2011-01-01 2011-01-20
3 C 2011-01-01 2011-02-03

日期范围不重叠,可能跨越几个月,在一个月内可能存在针对特定用户和部门的多个范围。
我想要做的是总结每个用户、部门、年份和月份的天数(包括),如下所示(在我的示例中保留任何数学错误......):
UserID  Department  Year  Month  Days
====== ========== ==== ===== ====
1 A 2011 01 10
1 A 2011 02 4
1 A 2011 03 5
1 B 2011 01 2
2 A 2011 01 20
3 C 2011 01 31
3 C 2011 02 3

此数据将进入报告工具使用的新表中。
我希望问题描述足够清楚,这是我第一次在这里发帖,请温柔:-)

提前致谢!

最佳答案

工作样本

-- sample data in a temp table
declare @t table (UserID int, Department char(1), StartDate datetime, EndDate datetime)
insert @t select
1 ,'A', '2011-01-02','2011-01-05'union all select
1 ,'A', '2011-01-20','2011-01-25'union all select
1 ,'A', '2011-02-25','2011-03-05'union all select
1 ,'B', '2011-01-21','2011-01-22'union all select
2 ,'A', '2011-01-01','2011-01-20'union all select
3 ,'C', '2011-01-01','2011-02-03'

-- the query you need is below this line

select UserID, Department,
YEAR(StartDate+v.number) Year,
MONTH(StartDate+v.number) Month, COUNT(*) Days
from @t t
inner join master..spt_values v
on v.type='P' and v.number <= DATEDIFF(d, startdate, enddate)
group by UserID, Department, YEAR(StartDate+v.number), MONTH(StartDate+v.number)
order by UserID, Department, Year, Month

关于sql - 根据日期范围汇总每月的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com