日期范围的SQL连接计数到日历日期表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日期范围的SQL连接计数到日历日期表?相关的知识,希望对你有一定的参考价值。

我有一个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查询可以创建一个新的日期表,其中包含当天缺席的人数?

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;

但是,当可能有某种类型的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是您感兴趣的所有日期的列表(来自表格或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

以上是关于日期范围的SQL连接计数到日历日期表?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 检索具有不同序列号的所有记录,在日期范围和计数之间,拒绝代码 = "Low Current"

在雪花中创建具有动态日期范围的日历表

SQL 加入日期范围

如何使用 SQL 获取 2 列之间日期差异的计数(值的分布)?

Mysql - 使用多个连接表查找丢失的日期

SQL 将库存计数表连接到日期表