作者cutekid (可爱小孩子)
看板Database
标题Re: [SQL ] 请问如何计算重复日期区间的总实际天数
时间Fri Sep 19 09:33:26 2014
假设 (id,StartDate,EndDate) 是「唯一」:
select id,sum(day) day
from (
select id,StartDate,EndDate,min(day) day
from (
select t2.id,t2.StartDate,t2.EndDate,
case
when t1.StartDate = t2.StartDate and t1.EndDate = t2.EndDate
then t2.day
-- (t1 = t2 表示自己本身)
when t2.StartDate >= t1.StartDate and t2.EndDate <= t1.EndDate
then 0 -- (t2 被 t1 整个包住了)
when t2.StartDate >= t1.StartDate and t2.StartDate <= t1.EndDate
then t2.day - DATEDIFF(dd,t2.StartDate,t1.EndDate) - 1 -- (部分重叠)
else t2.day
-- (完全没重叠)
end day
from @t t1 inner join @t t2 on t1.id = t2.id
where
(t2.StartDate > t1.StartDate ) or -- 加上条件後,重叠状况剩
两种
(t1.StartDate = t2.StartDate and t1.EndDate <= t2.EndDate)
) t
group by t.id,t.StartDate,t.EndDate
) t
group by t.id
※ 引述《Mutex (Mutex)》之铭言:
: 资料库名称:SQL
: 资料库版本:2008
: 内容/问题描述:希望计算每个人在区间内的实际天数有几天
: 但会遇到日期重复的问题 不知道该如何处理
: ID StartDate EndDate day
: A 20140101 20140115 15
: A 20140114 20140117 4
: B 20140215 20140220 6
: B 20140220 20140225 6
: C 20140301 20140305 5
: C 20140320 20140321 2
: 希望得到的结果是
: A 17
: B 11
: C 7
: 希望高手能协助帮忙解决了 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.221.80.36
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1411090409.A.F68.html