2017-02-18 3 views
0

Мое время выдает данные в таблицу SQL с одним столбцом для ввода и вывода временных меток и имя сотрудника в другом столбце. Я хотел бы иметь возможность рассчитать ежедневные часы для каждого сотрудника с помощью SQL-запроса из сценария Google Таблиц.Рассчитать продолжительность между отметками времени в одном столбце

Вот что у меня есть:

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 

Ive пытался с помощью 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 

Есть, конечно, другие работники, но каждый человек только один раз в день. Некоторое время я искал Google, но не нашел ничего похожего на мою проблему. Буду признателен за любую оказанную помощь.

+0

Прежде всего, какие СУБД вы используете? Если он поддерживает функции окон, синтаксис немного отличается между платформой. Если это не так, существует общий, но обычно менее эффективный метод решения этих проблем. –

+0

Теперь ... Причина, по которой вы получаете только 1 строку, - это то, что вы не рассматриваете даты в своей группе GROUP BY. Таким образом, все для каждого 'user_id' сворачивается в одну строку. Вам необходимо сгруппировать с помощью расчета, определяющего дату с полей даты и времени. Например. На сервере Sql вы должны использовать следующие методы: 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); 
} 

Вот как это выглядит после запуска данных и форматирования вывода. Я также форматировал ваше datetime как дату и время сортировки по возрастающим датам.

Вот как это выглядит сейчас

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, чтобы быть частью запроса?

Смежные вопросы