【问题标题】:Find intersecting dates查找相交日期
【发布时间】:2021-06-25 17:25:52
【问题描述】:

谁能帮我解决下一个问题。我有 MS Access 表,可以说是我的员工,对于他们每个人,我都有他们假期的开始和结束日期:

Name    begin       end
John    1.3.2021.   15.3.2021.
Robert  6.3.2021.   8.3.2021.
Lisa    13.3.2021.  16.3.2021.
John    1.4.2021.   3.4.2021.
Robert  2.4.2021.   2.4.2021.
Lisa    15.5.2021.  23.5.2021.
Lisa    5.6.2021.   15.6.2021.

如何从表中的每个日期(包含在间隔开始-结束的日期)中获得缺勤员工数量的结果。例如:

1.3.2021. 1     '>>>only John
2.3.2021. 1     '>>>only John
3.3.2021. 1     '>>>only John
4.3.2021. 1     '>>>only John
5.3.2021. 1     '>>>only John
6.3.2021. 2     '>>>John and Robert
7.3.2021. 2     '>>>John and Robert
...

谢谢你!

【问题讨论】:

    标签: sql date ms-access count


    【解决方案1】:

    您可以使用union 组合表和相关子查询:

    select dte,
           (select count(*)
            from t
            where d.dte between t.[begin] and t.[end]
           ) as cnt
    from (select [begin] as dte
          from t
          union 
          select [end]
          from t
         ) d;
    

    【讨论】:

    • 谢谢!这很快:)。它似乎非常接近解决方案,但并非所有日期都在结果中。例如,我得到 1.3.2021 的结果。接下来是 6.3.2021。
    • @Mario 。 . .您的问题是:“表格中的每个日期”。如果您需要日期之间的时间,那么您还需要一个日历表。
    • 您好,我只提及由间隔(开始-结束)定义的日期,就像我的示例结果一样。可以从这些时间间隔而不是从日历表中以某种方式检索这些日期吗?感谢您的帮助。
    • @Mario 。 . .不是真的在 MS Access 中。你需要一个日历表。
    • 好的。我制作了一个日历表并调整了您的 sql 语句的最后一部分,它可以正常工作 - 非常感谢您!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2018-04-07
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多