2012-10-19 144 views
0

我如何計算用戶在給定日期內缺勤的總天數?mysql計算缺勤總天數

這是我如何認爲它會工作的基本思路,但我無法得到工作的總部分。

SELECT total(from - until) FROM absences WHERE absences.user_id = 123 
AND absence_date_until <= '1999-12-01' AND absence_date_from >= 
'2000-12-01' 


CREATE TABLE IF NOT EXISTS `absences` (
    `absence_id` int(10) NOT NULL AUTO_INCREMENT, 
    `absence_created` datetime DEFAULT NULL, 
    `absence_date_from` datetime DEFAULT NULL, 
    `absence_date_until` datetime DEFAULT NULL, 
    `absence_status` enum('PENDING','APPROVED') NOT NULL, 
    `user_id` int(6) NOT NULL, 
    PRIMARY KEY (`absence_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

回答

1
SELECT SUM(datediff(until, from) + 1) total_absences 
FROM absences 
WHERE absences.user_id = 123 
     AND absence_date_until <= '1999-12-01' 
     AND absence_date_from >= '2000-12-01' 
+0

這工作完美感謝。我們爲什麼需要'+ 1',你能解釋爲什麼需要這部分? –

+1

DATEDIFF將給出兩個日期之間的差異,所以如果你有'2012-01-01'和'2012-01-02',日期之間的差異是1.但是這將錯過兩天。所以你總是需要添加一個來獲得缺席天數。 – Tom

0

選擇DATEDIFF()IM MySQL的

SELECT datediff(absence_date_from- absence_date_until) 
FROM absences WHERE absences.user_id = 123 
AND absence_date_until <= '1999-12-01' 
AND absence_date_from >= '2000-12-01'