Sql 基于字段类型计算两个访问日期之间的天数

Sql 基于字段类型计算两个访问日期之间的天数,sql,ms-access,Sql,Ms Access,我有一张表,上面有时间段的第一个和最后一个日期,我需要计算这两个日期之间的“生病”天数。我很难让计数正常工作。我设置的计数是计算每天的疾病,不管下面的时间段是什么,这就是我的意思的一个例子 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/

我有一张表,上面有时间段的第一个和最后一个日期,我需要计算这两个日期之间的“生病”天数。我很难让计数正常工作。我设置的计数是计算每天的疾病,不管下面的时间段是什么,这就是我的意思的一个例子

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
从第一个日期到最后一个日期有两类,分别是“休息日”和“疾病”。我只对第一次约会和最后一次约会之间因“疾病”而失去的日子感兴趣

第一个和最后一个日期取自tmp_表,tmp_表从包含每个人所有日期的表中提取数据。然后计算连续的休息日和疾病天数,得到一段缺勤时间

有没有办法让我看到两次约会之间的“疾病”

当前查询:

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;

这还不够吗?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;

您可以使用如下查询:

SELECT DATEDIFF(day,'01-01-2016','02-02-2016') AS DaysLost
如果需要有关DATEDIFF函数的更多信息,请阅读以下内容:

显示您当前的查询!那可能会有帮助!如上所述,你只需要这些日期之间的差异,对吗?不,不完全是这样,有两个类别组成了第一个和最后一个日期;'“休息日”和“疾病”。我想知道两个日期之间有多少天是“病假”。两个日期之间的病假不一定是区别,尽管这是问题所在。firstdate和lastdate之间可以混合使用“休息日”和“疾病”。我需要知道从第一次约会到最后一次约会之间有多少天是生病的。我所做的查询只是给了我所有因疾病而损失的天数,不管firstdate和lastdate是什么,就像我原始问题的第一个表中一样。你好,Noobie,我只是试图运行您的查询,但我发现缺少运算符的语法错误,我似乎找不到它。它可能正盯着我的脸看,但我对SQL还是新手,我很难发现它!tmp_occurrences.EAN=tbl_paysdata.EAN internal JOIN dim_AbsenceTypes ON tbl_paysdata.AbsenceType=dim_AbsenceTypes.AbsenceTypes中的某个地方如果有两个日期来计算疾病,那么它可以添加到WHERE条件中,比如两个日期之间的日期。感谢到目前为止的帮助Noobie,代码出现问题是由于缺少括号,因为存在多个内部联接。我运行了代码,但它没有提供我所需要的。我需要知道FromDate和ToDate之间有多少日期是生病的。因为一段时间的缺勤可以包含疾病和休息日,datediff只给出缺勤天数,我需要缺勤的疾病天数哦,对不起。我想您需要记录疾病的日期。谢谢rui,我可以使用datediff中的firstdate和lastdate字段吗?我想可以。您可以尝试以下操作:选择DATEDIFFday,选择FirstDate from Sight,其中EAN=,选择LastDate from Sight,其中EAN=作为DaysLost这是访问,因此:选择DATEDIFFd,01-01-2016,02-02-2016作为DaysLost。感谢您的更正。我不确定访问语法。