根据查询条件(时间区间)查询多个客户的实际服务时间,客户有一个合同时间区间,
多种情况:1.查询时间区间,完全包含在合同时间区间之内2.合同时间区间,完全包含在查询时间区间之内3.查询时间区间和合同时间区间有部分交集算出上述实际服务天数以后还需要减去一个在实际服务时间内的暂停时间(可以暂停多次)1.实际服务时间区间,完全包含在暂停时间区间之内2.暂停时间区间,完全包含在实际服务时间区间之内3.暂停时间区间和实际服务时间区间有部分交集涉及表:合同表,合同状态修改表
合同表:ID,合同编号,开始时间,结束时间
合同状态修改表:ID,合同ID,合同状态(包含开始和暂停),修改时间(暂停时间=暂停状态的修改时间-重新开始的修改时间)

解决方案 »

  1.   

    其实你的1,2,3种情况都是想取两个时间段有交集的部分, 我只说一说我们实际中的做法, 给你一点提示吧例如: 查询日期 @d1~@d2, 合同日期 sdate~edate
    如果满足条件@d1 <= edate and @d2 >= sdate, 则两个时间段必定有交集
    所以, 我们想取实际中交集的那一部分, 可以这样来写:
    dbo.MaxD(sdate, @d1), dbo.MinD(edate, @d2), 
    MaxD是一个我们自己写的函数, 用来取两个日期当中比较大的那个, MinD则相反, 
    当然是在满足前面的条件时才能这样写, 否则取出来的时间段就是错误的