2014-12-08 33 views
0

我不知道這是否可能,但它確實很棒。對於在不同項目上記錄時間的人員,我有一個登錄表,我需要爲給定時間段內的每個項目編制時間記錄報告。選擇不同並獲得時間戳差異總和

我的表看起來是這樣的:

id | project | time_in    | time_out   | break 
---------------------------------------------------------------- 
1 | 1  | 2014-12-07 05:00:00 | 2014-12-07 10:00:00 | 30 
2 | 2  | 2014-12-07 06:00:00 | 2014-12-07 13:00:00 | 15 
3 | 1  | 2014-12-07 14:00:00 | 2014-12-07 18:00:00 | 0 
4 | 3  | 2014-12-07 08:30:00 | 2014-12-07 18:45:00 | 75 
5 | 2  | 2014-12-07 12:00:00 | 2014-12-07 16:30:00 | 0 

我想什麼,能夠做的就是記錄的給定一個日期範圍內的每個項目的時間的報告,即總時間,大概以秒爲單位,記錄每個項目。

time_intime_outTIMESTAMP類型的字段; break是一個整數,代表人數在分鐘該人員正在休息。我需要爲每個項目獲得time_out - time_in - break的總和,例如對於12月7日:

project | time 
--------------- 
1  | 34200 
2  | 40500 
3  | 34200 

這是我到目前爲止有:

SELECT DISTINCT 
    `project` 
FROM `sign_ins` 
WHERE 
    `time_in` >= '2014-12-07 00:00:00' AND 
    `time_out` <= '2014-12-08 00:00:00'; 

我感謝你的幫助就這一點,所以社區。你們真棒!

+1

一個問題我看到的是,你不要期間所分鐘的人休息了區分。如果time_in在12/7之前,並且time_out在12/7之後或之後,並且他們休息一會兒,您不知道12/7中休息的哪一部分。 – 2014-12-08 02:42:46

+0

是的,這是模式中的潛在限制。然而,界面將時間限制爲與(或次日午夜)時間相同的日期,即如果您工作時間爲下午6點至上午6點,則需要記錄兩個條目:第一天上午6點至12點,上午12點至上午6點第二,分開進入休息時間。 – 2014-12-08 02:47:14

回答

2

通過將日期/時間值轉換爲Unix時間戳,您可以獲得秒之差。然後,只需使用聚合的sum()差異:

SELECT project, 
     SUM(UNIX_TIMESTAMP(time_out) - UNIX_TIMESTAMP(time_in) - (break * 60)) as DiffSecs 
FROM `sign_ins` 
WHERE `time_in` >= '2014-12-07 00:00:00' AND 
     `time_out` <= '2014-12-08 00:00:00' 
GROUP BY project; 
+0

你忽略了中斷部分:) – 2014-12-08 02:47:29

+0

我只能做'SUM(UNIX_TIMESTAMP(time_out) - UNIX_TIMESTAMP(time_in) - break * 60)',對不對? – 2014-12-08 02:48:06

+0

@MMiller不需要在休息時附加括號* 60請參閱我在他的回答中所做的修改 – 2014-12-08 02:48:37

相關問題