根据字段类型计算两个日期之间的访问天数

时间:2016-03-18 09:43:42

标签: sql ms-access

我有一张包含时间段的第一个和最后一个日期的表格,我需要计算这两个日期之间的天数“sickness”。我无法让计数正常工作。我设置的计数是计算每天的疾病,无论下面的时间段是我的意思的一个例子。

EAN      FirstDate    LastDate  DaysLost
24659   02/03/2016  04/03/2016  5
24659   07/03/2016  08/03/2016  5
14659   23/02/2016  26/02/2016  14
14659   29/02/2016  04/03/2016  14
14659   07/03/2016  11/03/2016  14

我希望看到的是:

EAN      FirstDate    LastDate  DaysLost
24659   02/03/2016  04/03/2016  3
24659   07/03/2016  08/03/2016  2
14659   23/02/2016  26/02/2016  4
14659   29/02/2016  04/03/2016  5
14659   07/03/2016  11/03/2016  5

有两个类别构成了上次日期的第一个日期,它们是“rest day”和“sickness”。我只对看到第一个和最后一个日期之间因“sickness”而丢失的日子感兴趣。

第一个和最后一个日期取自tmp_table,它从表中提取数据,包含每个人的所有日期。然后计算休息日和疾病的连续天数以获得一个缺席期。

我有没有办法在两个日期之间看到“sickness”?

当前查询:

SELECT tbl_PaysysData.EAN, tmp_Occurences.FirstDate, tmp_Occurences.LastDate, Count(dim_AbsenceTypes.AbsenceType) AS DaysLost INTO tmp_OccurencesandDaysLost
FROM (tmp_Occurences INNER JOIN tbl_PaysysData ON tmp_Occurences.EAN = tbl_PaysysData.EAN) INNER JOIN dim_AbsenceTypes ON tbl_PaysysData.AbsenceType = dim_AbsenceTypes.AbsenceType
WHERE (((dim_AbsenceTypes.AbsenceType)="sickness"))
GROUP BY tbl_PaysysData.EAN, tmp_Occurences.FirstDate, tmp_Occurences.LastDate;

2 个答案:

答案 0 :(得分:1)

这不够吗? DATEDIFF会给你这些日期之间的差异,即实际的疾病天数吗?

SELECT 
    tbl_PaysysData.EAN, 
    tmp_Occurences.FirstDate, 
    tmp_Occurences.LastDate,
    DATEDIFF(day,tmp_Occurences.FirstDate,tmp_Occurences.LastDate) AS DaysLost 
INTO tmp_OccurencesandDaysLost
FROM tmp_Occurences 
INNER JOIN tbl_PaysysData ON tmp_Occurences.EAN = tbl_PaysysData.EAN 
INNER JOIN dim_AbsenceTypes ON tbl_PaysysData.AbsenceType = dim_AbsenceTypes.AbsenceType
WHERE dim_AbsenceTypes.AbsenceType="sickness"
GROUP BY tbl_PaysysData.EAN, tmp_Occurences.FirstDate, tmp_Occurences.LastDate;

答案 1 :(得分:-1)

您可以使用以下查询:

SELECT DATEDIFF(day,'01-01-2016','02-02-2016') AS DaysLost

如果您需要有关DATEDIFF功能的更多信息,请阅读: W3Schools DateDiff