SQL 将日期范围计数加入 table 日历日期?
SQL join count of date ranges to table of calendar dates?
我有一个 tblAbsence
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 查询可以创建新的 table 日期以及当天缺席的人数?
Date Absent
18-Mar-18 1
19-Mar-18 2
20-Mar-18 3
我知道如何从日历 table 创建记录集,基本上 rs1.movenext 通过每个日期,同时我用满足
的计数更新 tblTemp
WHERE tblAbsence.start <= rs1.date AND tblAbsence.End >= rs1.date;
但是当可能存在某种可能有效的 JOIN 类型时,这似乎重复得可笑?
如果你有一个日期列表,问题就很简单了。您可以使用子查询从您的缺勤列表中计算,其中列表中的日期介于缺勤的开始和结束之间。:
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 是您感兴趣的所有日期的列表(来自 table,或来自 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
我有一个 tblAbsence
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 查询可以创建新的 table 日期以及当天缺席的人数?
Date Absent
18-Mar-18 1
19-Mar-18 2
20-Mar-18 3
我知道如何从日历 table 创建记录集,基本上 rs1.movenext 通过每个日期,同时我用满足
的计数更新 tblTempWHERE tblAbsence.start <= rs1.date AND tblAbsence.End >= rs1.date;
但是当可能存在某种可能有效的 JOIN 类型时,这似乎重复得可笑?
如果你有一个日期列表,问题就很简单了。您可以使用子查询从您的缺勤列表中计算,其中列表中的日期介于缺勤的开始和结束之间。:
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 是您感兴趣的所有日期的列表(来自 table,或来自 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