【问题标题】:Grouping dates for each period每个期间的分组日期
【发布时间】:2016-02-02 14:13:24
【问题描述】:

每天有员工生病,就会增加一条记录
我的表看起来像这样(示例):

Name   -   Date  
Ben   -   14/01/2016   
Ben   -   15/01/2016  
Ben   -   18/01/2016  
Ben   -   19/01/2016  
Ben   -   02/02/2016  
Ben   -   03/02/2016  
Bart  -   12/01/2016  
Bart  -   13/01/2016  
Bart  -   14/01/2016
Lisa  -   26/02/2016  
Lisa  -   29/02/2016  
Lisa  -   01/03/2016

我需要的是:

Name   -   StartDate   -  NumberOfDays  
Ben   -   14/01/2016   -   4 (so 4 following dates (including a weekend))  
Ben   -   02/02/2016   -   2  
Bart   -  12/01/2016   -   3  
Lisa  -  26/02/2016    -   3

因此按名称和期间分组,并显示期间的开始日期和天数。

我不知道如何开始,即使在 SQL 中是可能的。

问题是这个时间段可以包括周末,所以我想我需要一个表周末日期和假期来检查(因为只需采取 ==>(difference current.date-previous.date) <= 3 就可以使一个时间段3天不是周末的实际两个时段)?

我希望我能很好地解释我的问题。非常感谢所有帮助!

【问题讨论】:

  • MySQL 和 SQL Server 的日期/时间处理方式不同。不要标记未涉及的产品...
  • 国定假日呢?
  • 如果你有一个时间表,添加另一个列,它将对每一行进行排名并过滤周末,​​这样排名列将连续
  • @jarlh 感谢回复,我删除了标签,国定假日也应该被视为假期(与周末相同)但是我有一张所有周末和假期的桌子
  • @sagi 我不确定你的意思?

标签: sql date ms-access


【解决方案1】:

MS 访问?我怀疑仅使用 MS Access SQL 就可以轻松解决此问题,但我不太了解。

您要做的是在所有非工作日交叉加入所有生病的用户。将此结果与病假结合使用。然后整个事情就变成了一个单纯的差距和孤岛问题。通常最好用分析函数来解决,我很确定 MS Access 没有。

这将是工作基地:

select s.name, n.date, 'NO WORK DAY'
from (select distinct name from sick) s
cross join noneworkdays n
union all
select s.name, s.date, 'SICK'
from sick s;

另一个选项是选择所有病假和所有非工作日,并使用编程语言循环解决这个问题。这可能是您最简单的解决方案。

【讨论】:

    【解决方案2】:

    这是为 SQL Server 准备的:

    select Name, min(Date), count(*), Year(Date), Month(Date)
    from table
    group by Name, Year(Date), Month(Date)
    

    其他数据库将具有与 YEAR() 和 MONTH() 等效的函数。

    【讨论】:

    • 这不是操作要求的。你只会给 Ben 带来一排
    • 我认为这是 OP 所要求的。对于 Ben 来说,它将是每年/每月一行。
    • op 要求连续几天
    • 这不行,如果他在同一个月工作,但是请了几天病假,它不会知道,因为你是按月和按年分组的,它不会不管他这个月有没有空档(如果他在2月和3月之间没有空档,都应该算一个)
    • 我看到可能阅读该问题以给出该答案,但我的阅读也是可能的。它的定义并不十分严格。但是好吧,显然人们认为我读错了。
    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2016-10-17
    • 2018-06-26
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多