Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 cte中管理顺序编号_Sql_Sql Server_Sequence_Common Table Expression_Self Join - Fatal编程技术网

在自联接SQL cte中管理顺序编号

在自联接SQL cte中管理顺序编号,sql,sql-server,sequence,common-table-expression,self-join,Sql,Sql Server,Sequence,Common Table Expression,Self Join,我正在尝试在SQL Server中创建一个数据集,以显示员工使用公司应用程序登录和注销的时间。目前,JSON脚本中有一个标志来标识人们何时登录(activity=0)和何时注销(activity=1),因此尽管没有类似于会话id的东西来链接这两者,但至少可以将它们作为单独的CTE进行匹配 直到今年早些时候,还没有活动标志,也没有链接标识符,所以我创建了一个带有行号的cte,并使用自连接来匹配第一个事件和第二个事件,依此类推。问题是1链接到2,然后2和3或null是下一行,我想不出如何阻止这种情况

我正在尝试在SQL Server中创建一个数据集,以显示员工使用公司应用程序登录和注销的时间。目前,JSON脚本中有一个标志来标识人们何时登录(activity=0)和何时注销(activity=1),因此尽管没有类似于会话id的东西来链接这两者,但至少可以将它们作为单独的CTE进行匹配

直到今年早些时候,还没有活动标志,也没有链接标识符,所以我创建了一个带有行号的cte,并使用自连接来匹配第一个事件和第二个事件,依此类推。问题是1链接到2,然后2和3或null是下一行,我想不出如何阻止这种情况发生,所以我非常感谢关于如何解决这一问题的任何建议。(还有一个小问题,应用程序会出现故障,所以它会在几秒钟内创建错误条目,我也不想去抑制)

这是数据的截图;如果没有匹配的记录,则时间戳为时间+5分钟,未完成设置为1。(由于这是我的第一篇SO帖子,我无法粘贴图像,但它有2&3/3&4/4&null等示例)

下面是join的源代码;其他CTE为[in]和[out],因此保留其别名

from [neither] i 
left outer join [neither] o
on i.created_by = o.created_by
and i.[code] = o.[code] 
and o.rn = i.rn + 1
and o.created_at_device between i.created_at_device and dateadd(hour, 2, i.created_at_device)
and i.premises_id = o.premises_id 
left outer join dbo.[user] u on i.created_by = u.id
left outer join dbo.division d on u.division_id = d.id
left outer join lkp.calendar cal on i.created_date = cal.[date]
left outer join lkp.sort_order_months mes on cal.firstdayofmonth = mes.startdate -- I was getting irritated, so the alias is Spanish: mes = month
left outer join lkp.sort_order_weeks sem on cal.weekending = sem.weekdate -- likewise: semana = week
left outer join dbo.premises p on i.premises_id = p.id
left outer join lkp.areas ar on ar.alias = p.rg_department

我在生活中没有使用游标就成功地走到了这一步,但这是解决办法吗?或者有没有一种方法可以通过自联接来解决?我知道我需要的是,如果一个行号已经在out列(o_rn)中使用了,它就不能出现在in列(I_rn)中,但我完全不知道如何做到这一点——或者至少,在花了一天的时间来解决这个问题之后

您的快照是结果而不是数据吗?我希望在原始数据中看到某种id、日期时间和活动。我们可能更容易从原始数据中获取您需要的信息。