2011-11-03 44 views
1

我有一個工作計時卡MySQL,但我沒有辦法使用VIEW s或FUNCTION s tiling時間。我想使用MySQL函數調用,例如getTodaysHours (user CHAR(45))來返回當天的用戶小時數(包括自插入後的小時數)。問題是我不知道如何在FUNCTION中執行數學運算。時間表MySQL查詢

這裏是我的表:

Time Sheet

這裏是我的「麻煩」的過程:

DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `getTodaysHours`(OUT hours INT, IN user CHAR(45)) 
BEGIN 
    SELECT SUM(timestamp) FROM info 
    WHERE DATE(FROM_UNIXTIME(timestamp-25200))=CURDATE() AND 
    fullname=user 
    ORDER BY timestamp ASC; 
END 

顯然SUM()是不是我想用什麼,但我想休息上班。

+1

所以看起來ericfoss已經連續兩次檢查了,沒有干預檢查。他是不是把131029200'工作到1319610596'?或者從「1319587159」到「139610596」? –

回答

0

如果人們可以在同一天多次進出時鐘,那麼僅使用上面顯示的數據庫結構的單個純SQL語句將非常困難。

如果它知道,你只能登入/登出每天一次這裏的東西,將工作

SELECT COALESCE(out.timestamp, UNIX_TIMESTAMP()) - in.timestamp 
FROM info in 
LEFT OUTER JOIN info out on in.fullname = out.fullname 
WHERE in.inout = 'in' 
AND out.inout = 'out' 
AND DATEDIFF(FROM_UNIXTIME(in.timestamp),CURDATE()) = 0 
AND DATEDIFF(FROM_UNIXTIME(out.timestamp),CURDATE()) = 0 

如果添加了跟蹤輸入/輸出的雙會變得容易,因爲比較列您將可以加入該專欄。現在你需要做一個相關的子選擇來找到輸入之後的下一個最接近的輸出。

總而言之,你應該做這個過程,因爲單個SQL語句不會返回像樣的錯誤數據不符合查詢期望的情況(現在兩種情況都出於上述情況)

+0

它需要支持多個輸入輸出,並報出有奇數輸出的日子。 count()!= even很簡單,但在一天中,奇怪的一拳意味着他/她仍在工作,所有數學都需要作出相應的反應。可能的輸出是0,開始 - 結束和開始電流。所有的錯誤返回0。 –