1
我有下面的查詢,它給了我一個學生缺席的天數。 DATEDIFF和DATEPART計算平日和假期不應算作缺席日。缺席的日子存儲在studentDable中的兩個字段中,分別是FromDate和toDate。所以缺席的日子在日期範圍內。如果某位學生缺勤一天,則記錄於2015年11月23日,11/23/2015。如果一個學生缺席兩天,那麼2015年11月23日,2015年11月24日。選擇日期範圍內的某些日期
DECLARE @startDate DATE SET @startDate = '20151121'
DECLARE @endDate DATE SET @endDate = '20151123'
SELECT
a.studentName
,SUM(DATEDIFF(dd, fromDate, toDate)
- (DATEDIFF(wk, fromDate, toDate) * 2)
-CASE WHEN DATEPART(dw, fromDate) = 1 THEN 1 ELSE 0 END
+CASE WHEN DATEPART(dw, toDate) = 1 THEN 1 ELSE 0 END + 1)- COUNT(h.holiday)
AS totalAbsentDay
FROM studentTable a
LEFT OUTER JOIN holiday h
ON h.holiday < a.toDate and h.holiday > a.fromDate
WHERE a.fromDate = @startDate AND a.toDate = @endDate
GROUP BY a.studentName
的這裏的問題是,當我嘗試宣告開始和結束日期,它並沒有給我正確的缺勤天數。 例如,如果學生在11/23/2015和11/26/2015之間缺席4天缺席,並且我聲明開始日期爲2015年11月22日和2015年11月27日結束日期,牛逼給我的3
你確定在哪裏? fromDate = @startDate AND a.toDate = @ endDate'是正確的過濾器..?我的意思是如果過濾器註釋掉了,結果是正確的? – Susilo
是的,Susilo。如果你註釋掉DECLARE部分和WHERE子句。查詢工作正常。 – NCooper
我試着用我自己的數據根據我自己的感覺..即使在'declare'和'where'註釋掉你的查詢失敗後,如果在一個學生缺席的情況下有多個假期,它會變成..可能是我的感覺是錯的..所以請你分享表格結構和樣本數據..? – Susilo