我有一张如下表所示的表格。实际上,每个用户有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的“可靠”日期范围。
我不聪明......
谢谢。
答案 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