2017-02-18 178 views
0

我的時間時鐘輸出到一個SQL表,其中一列用於輸入和輸出時間戳,另一列中輸入員工姓名。我希望能夠使用Google表格腳本中的SQL查詢來計算每位員工的每日小時數。計算一列中的時間戳之間的持續時間

繼承人我有:

ID  Name   Timestamp 
1023 Emily Bromley 2016-08-15 9:00:00 
1023 Emily Bromley 2016-08-15 17:00:00 
1023 Emily Bromley 2016-08-16 9:00:00 
1023 Emily Bromley 2016-08-16 17:00:00 
1023 Emily Bromley 2016-08-17 9:00:00 
1023 Emily Bromley 2016-08-17 15:30:00 
1023 Emily Bromley 2016-08-22 9:00:00 
1023 Emily Bromley 2016-08-22 16:00:00 
1023 Emily Bromley 2016-08-23 8:55:00 
1023 Emily Bromley 2016-08-23 16:58:00 
1023 Emily Bromley 2016-08-24 8:20:00 
1023 Emily Bromley 2016-08-24 16:59:00 
1023 Emily Bromley 2016-08-25 9:52:00 
1023 Emily Bromley 2016-08-25 16:59:00 
1023 Emily Bromley 2016-08-29 9:11:00 
1023 Emily Bromley 2016-08-29 16:57:00 

我想什麼做的是組日期一起,找到時間戳的持續時間:

ID  Name   Day and Duration 
1023 Emily Bromley 2016-08-15 8 
1023 Emily Bromley 2016-08-16 8 
1023 Emily Bromley 2016-08-17 6.5 
1023 Emily Bromley 2016-08-22 7 
1023 Emily Bromley 2016-08-23 8.1 
1023 Emily Bromley 2016-08-24 8.5 
1023 Emily Bromley 2016-08-25 8.1 
1023 Emily Bromley 2016-08-29 8.2 

伊夫使用MIN()和MAX嘗試()與GROUP BY,但他們不分組在一起,這是我最新的SQL查詢:

SELECT access_user.user_id, 
     access_user.first_name + ' ' + access_user.last_name, 
     MIN(user_time_log.log_time), 
     MAX(user_time_log.log_time) 
FROM access_user 
     INNER JOIN user_time_log 
     on access_user.user_id=user_time_log.user_id 
GROUP BY access_user.user_id, 
     access_user.first_name + ' ' + access_user.last_name 

其中輸出:

1023 Emily Bromley 2016-08-15 9:00:00 2017-02-17 13:01:00 

當然也有其他員工,但大家只在時鐘和從每天一次。我已經搜索了一段時間,但沒有遇到任何類似於我的問題的真實情況。任何幫助深表感謝。

+0

首先,你使用的是什麼RDBMS?如果它支持窗口功能,則平臺之間的語法略有不同。如果不這樣做,那麼解決這些問題就有一種通用但效率較低的技術。 –

+0

現在...你只得到1行的原因是你沒有考慮你的GROUP BY中的日期。因此,每個'user_id'的所有內容都彙總爲一行。您需要通過計算確定日期時間字段中的日期。例如。在Sql Server中,你會使用這裏的技術:http://stackoverflow.com/q/1843395/224704 –

回答

0

如果您想按照您的方式將其放在電子表格中,那麼您可以按照這種方式進行計算。您所要做的就是選擇有數據的列和右側的空列,然後運行此功能,它將以小時爲單位複製所有時間差。進入空欄。

function timeDiff() 
{ 
    var rng = SpreadsheetApp.getActiveRange(); 
    var hour = 3600000; 
    var rngA = rng.getValues(); 
    for(var i = 0; i < rngA.length ;i++) 
    { 
    if(i>0) 
    { 
     rngA[i][1]= (new Date(rngA[i][0]).getTime() - new Date(rngA[i-1][0]).getTime())/hour; 

    } 


    } 
    rng.setValues(rngA); 
} 

下面是運行數據並格式化輸出後的樣子。我還將日期時間格式化爲日期時間並按日期升序排序。

這裏是什麼樣子,現在

1023 Emily Bromley 8/15/2016 9:00:00 
1023 Emily Bromley 8/15/2016 17:00:00 8.00 
1023 Emily Bromley 8/16/2016 9:00:00 16.00 
1023 Emily Bromley 8/16/2016 17:00:00 8.00 
1023 Emily Bromley 8/17/2016 9:00:00 16.00 
1023 Emily Bromley 8/17/2016 15:30:00 6.50 
1023 Emily Bromley 8/22/2016 9:00:00 113.50 
1023 Emily Bromley 8/22/2016 16:00:00 7.00 
1023 Emily Bromley 8/23/2016 8:55:00 16.92 
1023 Emily Bromley 8/23/2016 16:58:00 8.05 
1023 Emily Bromley 8/24/2016 8:20:00 15.37 
1023 Emily Bromley 8/24/2016 16:59:00 8.65 
1023 Emily Bromley 8/25/2016 9:52:00 16.88 
1023 Emily Bromley 8/25/2016 16:59:00 7.12 
1023 Emily Bromley 8/29/2016 9:11:00 88.20 
1023 Emily Bromley 8/29/2016 16:57:00 7.77 
0

@ user2942346,什麼是其他表access_user模樣。要點是如果自己加入這個表將獨自做輸出,你真的需要access_user作爲查詢的一部分嗎?