是否将日期范围的SQL联接计数连接到日历日期表?

是否将日期范围的SQL联接计数连接到日历日期表?,sql,ms-access,ms-access-2013,Sql,Ms Access,Ms Access 2013,我有一个问题 Name Start End Joe 18-Mar-2018 0800 26-Mar-2018 1830 Mary 19-Mar-2018 0010 19-Mar-2018 2349 Adam 21-Mar-2018 0700 21-Mar-2018 1300 是否有一个SQL查询可以创建一个包含当天缺席人数的新日期表 Date Absent 18-Mar-18 1 19-Mar-18 2 20-Mar-18 3 我知道

我有一个问题

Name    Start   End
Joe    18-Mar-2018 0800 26-Mar-2018 1830
Mary    19-Mar-2018 0010    19-Mar-2018 2349
Adam    21-Mar-2018 0700    21-Mar-2018 1300
是否有一个SQL查询可以创建一个包含当天缺席人数的新日期表

Date    Absent
18-Mar-18   1
19-Mar-18   2
20-Mar-18   3
我知道如何从日历表中创建一个记录集,基本上是rs1.movenext,通过每个日期,同时使用符合条件的计数更新tblTemp

WHERE tblAbsence.start <= rs1.date AND tblAbsence.End >= rs1.date;

但是,当可能存在某种类型的连接时,这种重复似乎是可笑的?

如果您有一个日期列表,问题就相当简单。您可以使用子查询从缺勤列表中计数,其中列表中的日期介于缺勤开始和结束之间:

SELECT TheDate, (SELECT Count(Name) FROM Absent WHERE Absent.End > DateList.TheDate AND Absent.Start < DateList.TheDate + #23:59:59#) As Absent
From DateList

其中DateList是您感兴趣的所有日期的列表,无论是从表中还是从Gustav的查询中,您都可以尝试以下操作:

select rs1.date,count(ta.Name) from Calendar rs1
    join tblAbsence ta on (ta.start<DATEADD(day,1,rs1.date) and ta.end >=rs1.date)
group by rs1.date
order by rs1.date

您有日历表或数字表吗?tbl的开始和结束是DTG。您可以利用所述的一系列日期。谢谢,但创建日期列表不是问题…我实际上是从另一个列表中创建tbl。我只是不知道如何加入他们。正在加入,但Query.recordcount=Datelist.recordcount*缺席.recordcount。因此,如果ex的Datelist中只有3个日期,那么您将得到一个比缺席时大3倍的记录计数SELECT Datelist.Date,从tblAbsence中选择CounttblAbsence.Name,其中tblAbsence.End>=Datelist.Date和tblAbsence.Start,这不是我共享的SQL。移除交叉连接。它破坏了查询。此外,您还删除了+23:59:59,使缺勤不计入最后一天。这是无效的Access JET/Ace SQL。加入将失败,如果您解决了这个问题,它将提示您输入参数日期。实际上,自Access-2013以来,外部加入是允许的,并且发布中有一个ms-Access-2013标记。它不是外部加入。据我所知,他们总是被允许的。它是连接中的多重比较和计算,没有括号。您可以在Access中尝试,您会发现它不起作用。此外,Count*+左联接将返回1,其中应返回0。