找到并发日期范围的差距 - MySQL

时间:2014-01-10 11:24:58

标签: mysql sql date date-range

我有一张如下表所示的表格。实际上,每个用户有50,000个用户,技术上无限多个范围。日期差距,开始,结束,重叠等没有限制。

User     From            To
A        2011-01-03      2013-04-09
A        2012-04-16      2012-03-08
A        2012-12-11      2013-06-17
A        2013-07-17
A        2013-09-22      2013-12-24
B        2011-04-06      2013-01-02
B        2012-02-12      2012-02-14
B        2012-11-10      2013-03-16
B        2013-04-16
B        2013-04-22     

我需要计算2013年工作日的数量,这些工作日的数量并未包含在每个用户的这些范围内。空白的“收件人”日期表示范围正在进行中。

在上面的例子中,它将是2013-06-18和2013-07-16之间用户A的工作日数,以及2013-03-17和2013-04-15之间的工作日数。

我有个人工作日的查询表,但是我使用min和max对日期范围所做的任何事情最终都会给我一个从2013-01-01到2013-12-31的“可靠”日期范围。

我不聪明......

谢谢。

1 个答案:

答案 0 :(得分:1)

SELECT   users.User, COUNT(*)

FROM     users
           CROSS JOIN weekdays
            LEFT JOIN userDates ON
                        userDates.User  = users.User
                   AND  userDates.From <= weekdays.date
                   AND (userDates.To IS NULL OR userDates.To >= weekdays.date)

WHERE    weekdays.date >= '2013-01-01'
     AND weekdays.date <  '2014-01-01'
     AND userDates.User IS NULL

GROUP BY users.User