Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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_Amazon Redshift - Fatal编程技术网

Sql 使用规则计算会话中花费的时间

Sql 使用规则计算会话中花费的时间,sql,amazon-redshift,Sql,Amazon Redshift,假设基表包含客户在其应用程序会话期间采取的每个操作(每行)的信息。当每个会话开始时,会记录action='Show',当用户结束会话时,会记录action='Hide'。对于用户执行的任何其他操作,都会使用不同的操作名称记录在显示和隐藏之间。不幸的是,这里没有sessionID列,这正是我试图根据这些信息创建的 请假定只有在会话开始和结束时才会发出“显示”和“隐藏”两个操作 根据给定的信息,我希望通过为每个会话创建唯一的sessionID(可以是数字或字符串)来总结数据,并记录会话中花费的时间

假设基表包含客户在其应用程序会话期间采取的每个操作(每行)的信息。当每个会话开始时,会记录action='Show',当用户结束会话时,会记录action='Hide'。对于用户执行的任何其他操作,都会使用不同的操作名称记录在显示和隐藏之间。不幸的是,这里没有sessionID列,这正是我试图根据这些信息创建的

请假定只有在会话开始和结束时才会发出“显示”和“隐藏”两个操作

根据给定的信息,我希望通过为每个会话创建唯一的sessionID(可以是数字或字符串)来总结数据,并记录会话中花费的时间

我使用的是红移SQL,所以如果我可以使用红移中的任何特殊函数,请利用它


您可以尝试编写两个子查询,并通过
客户

一个用于
操作='show'
,另一个用于
操作='Hide'

然后按行号加入,行号表示时间的开始和结束

SELECT t1.customer,
       t2.rn,  
       DATEDIFF(mins, t1.time,t2.time) spentTime
FROM (
        SELECT *,
          ROW_NUMBER() OVER(PARTITION BY customer ORDER BY time) rn 
    FROM bastTable 
    WHERE action = 'show'
) t1 JOIN (
    SELECT *,
           ROW_NUMBER() OVER(PARTITION BY customer ORDER BY time) rn  
    FROM bastTable 
    WHERE action = 'Hide'
) t2 on t1.rn = t2.rn and t1.customer = t2.customer

嗨,D-Shih,谢谢你的回答。我认为窗口函数中的order by是不正确的,所以在将其更改为“ROW_NUMBER()OVER(按客户订单按“时间”划分)”rn之后,它就成功了!请删除mysql标签?