Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算一列中时间戳之间的持续时间_Sql_Google Apps Script - Fatal编程技术网

Sql 计算一列中时间戳之间的持续时间

Sql 计算一列中时间戳之间的持续时间,sql,google-apps-script,Sql,Google Apps Script,我的时钟输出到一个SQL表,其中有一列用于输入和输出时间戳,另一列中有员工姓名。我希望能够通过Google Sheets脚本的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:

我的时钟输出到一个SQL表,其中有一列用于输入和输出时间戳,另一列中有员工姓名。我希望能够通过Google Sheets脚本的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

当然还有其他员工,但每个人每天只上下班一次。我已经在谷歌上搜索了一段时间,但没有发现任何与我的问题类似的东西。非常感谢您的帮助。

如果您想以现有的方式将其放入电子表格中,那么您可以采用这种方式进行计算。您所要做的就是选择包含数据的列,并在其右侧选择一个空列,然后运行此函数,它将以小时为单位复制所有时差。进入空列

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);
}

首先,您使用的是什么RDBMS?如果它支持窗口功能,则不同平台的语法略有不同。如果没有,就有一种通用但通常效率较低的技术来解决这类问题。现在。。。你只得到一行的原因是你没有考虑你的小组中的日期。因此,每个
用户id
的所有内容都汇总到一行中。您需要使用从日期时间字段确定日期的计算分组。例如,在Sql Server中,您可以使用以下技术:
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