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