为每个时段分组日期

时间:2016-02-02 14:13:25

标签: sql date ms-access

每天员工生病,加上记录 我的表看起来像这样(例子):

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中使用。

问题是这段时间可能包括周末所以我认为我需要表周末日期和假期来检查(因为只需要参加==&gt; (difference current.date-previous.date) <= 3就可以制作一个这3天不是周末的实际两个时期的期间?

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

2 个答案:

答案 0 :(得分:0)

MS Access?我怀疑单独使用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;

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

答案 1 :(得分:-4)

这适用于SQL Server:

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

其他数据库与YEAR()和MONTH()具有相同的功能。