从SQL(postgres)中的签入列表生成路由
我的桌子:checkinserverid,time,venueid 问题:要生成表示用户所走路线步骤的视图 想法:为了生成表单A,B的对,其中A是签入,B是具有时间限制的后续签入。同一天,B在A之后 什么不起作用:现在我的查询生成像A、B1、A、B2这样的查询。。。其中Bx是在a之后完成的签入。A1、B、A2、B也是如此。。。夫妇 我所需要的只是表A、B1和A1、B的一对,它们表示路由中真正的后续步骤,就像图中的圆弧,其中节点是原始签入 我当前结果的示例: 前3行具有相同的到达时间,而后2行具有相同的开始时间。我只需要第1行和第4行从SQL(postgres)中的签入列表生成路由,sql,postgresql,Sql,Postgresql,我的桌子:checkinserverid,time,venueid 问题:要生成表示用户所走路线步骤的视图 想法:为了生成表单A,B的对,其中A是签入,B是具有时间限制的后续签入。同一天,B在A之后 什么不起作用:现在我的查询生成像A、B1、A、B2这样的查询。。。其中Bx是在a之后完成的签入。A1、B、A2、B也是如此。。。夫妇 我所需要的只是表A、B1和A1、B的一对,它们表示路由中真正的后续步骤,就像图中的圆弧,其中节点是原始签入 我当前结果的示例: 前3行具有相同的到达时间,而后2行具有
我的实际解决方案:您可以在WHERE using NOT EXISTS中设置另一个条件,并在同一个表中进行第三次查询,以便在两次查询之间进行签入,同时注意在同一时间戳内的多个签入!,或按如下方式使用行号
CREATE VIEW vw_checkins AS
SELECT
userid,
time,
venueid,
row_number() OVER (PARTITION BY userid ORDER BY time) as row_number
FROM "POIs"."test";
然后可以按如下方式构建联接:
select A.userid, A."venueID", B."venueID", A.time as start_time, B.time as arrival_time
from vw_checkins as A, vw_checkins as B
where
B.row_number = A.row_number + 1
and date_trunc('day', A.time)=date_trunc('day', B.time)
and A."venueID" <> B."venueID"
and A.userid=B.userid;
请注意,我还用:[NOT]LIKE替换了您的NOT LIKE,如果您不需要它,请将其删除,例如正则表达式比较