代码之家  ›  专栏  ›  技术社区  ›  farmpapa

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

  •  0
  • farmpapa  · 技术社区  · 7 年前

    我有个标签

    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创建记录集。在我使用满足以下条件的计数更新tblTemp的同时,移动下一个日期

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

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Erik A    7 年前

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

    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的查询)

        2
  •  0
  •   Emre    7 年前

    您可以尝试以下操作:

    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