我有一张包含时间段的第一个和最后一个日期的表格,我需要计算这两个日期之间的天数“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;
答案 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