【发布时间】:2018-01-05 02:46:33
【问题描述】:
我目前正在尝试从列出用户冲浪行为的表中编写查询。该表如下所示
**RecordID RespondentID DeviceID UTCTimestamp Domain**
1 01faca75-1216-4a55-b43c-9d64ade852f7 4DF57C06-F0BD-4779-8983-37A8B02E5EDF 2017 年 6 月 11 日 10:21 goodreads.com
2 01faca75-1216-4a55-b43c-9d64ade852f7 4DF57C06-F0BD-4779-8983-37A8B02E5EDF 2017 年 6 月 11 日 10:21 goodreads.com
3 01faca75-1216-4a55-b43c-9d64ade852f7 4DF57C06-F0BD-4779-8983-37A8B02E5EDF 2017 年 6 月 11 日 10:21 gr-assets.com
4 01faca75-1216-4a55-b43c-9d64ade852f7 4DF57C06-F0BD-4779-8983-37A8B02E5EDF 06/11/2017 10:21 gr-assets.com
5 01faca75-1216-4a55-b43c-9d64ade852f7 4DF57C06-F0BD-4779-8983-37A8B02E5EDF 06/11/2017 10:23 itunes.apple.com
6 01faca75-1216-4a55-b43c-9d64ade852f7 4DF57C06-F0BD-4779-8983-37A8B02E5EDF 06/11/2017 10:23 itunes.apple.com
7 01faca75-1216-4a55-b43c-9d64ade852f7 4DF57C06-F0BD-4779-8983-37A8B02E5EDF 2017 年 6 月 11 日 10:51
8 01faca75-1216-4a55-b43c-9d64ade852f7 4DF57C06-F0BD-4779-8983-37A8B02E5EDF 2017 年 6 月 11 日 10:51
感谢大家的帮助,我终于搞定了。
RecordID RespondentID UTCTimestamp Source Domain To Domain RecordID
2 01faca75-1216-4a55-b43c-9d64ade852f7 06/11/2017 10:21 goodreads.com gr-assets.com 3 4 01faca75-1216-4a55-b43c-9d64ade852f7 2017 年 6 月 11 日 10:21 gr-assets.com itunes.apple.com 5 6 01faca75-1216-4a55-b43c-9d64ade852f7 06/11/2017 10:23 itunes.apple.com samplicio.us 7To Domain 是域名不同的下一行的值。
问题 虽然这看起来是正确的,但我们实际上已经跳过了整个第一条记录。这是因为,给定数据集,第一行“域”连接到第二行“域”,我们跳过了它。第 2 行与第 3 行相结合,因此第一个结果记录显示 RecordID 2。我想进一步微调。我的结果应该从 RecordID 1 开始并跳过 RecordID 2,因为域是相同的,因此结果应该显示
RecordID RespondentID UTCTimestamp 源域到域
1 01faca75-1216-4a55-b43c-9d64ade852f7 06/11/2017 10:21 goodreads.com gr-assets.com 3 01faca75-1216-4a55-b43c-9d64ade852f7 2017 年 6 月 11 日 10:21 gr-assets.com itunes.apple.com 5 01faca75-1216-4a55-b43c-9d64ade852f7 06/11/2017 10:23 itunes.apple.com samplicio.us我尝试跳过 RecordID 2,但是遇到了 SQL 错误“prev_nane”不存在。
SELECT t1."RecordID", t1."RespondentID", t1."UTCTimestamp", t1."Domain" as "Source Domain", t2."Domain" as "To Domain" , t2."RecordID", lag(t1."Domain",1) over (order by t1."RecordID") as prev_name
from public."Traffic - Mobile" as t1
join public."Traffic - Mobile" as t2 on t2."RespondentID" = t1."RespondentID" AND t2."DeviceID"=t1."DeviceID" AND t2."RecordID"=t1."RecordID"+1 And t1."Domain"<>T2."Domain" AND t2."UTCTimestamp">=t1."UTCTimestamp" AND t2."Sequence"-t1."Sequence"=1 and t1."RecordID"<13 AND t1."Domain"<>prev_name;
我做错了什么?
我想要达到的最终结果如下 RecordID RespondentID UTCTimestamp 源域到域最终目的地
1 01faca75-1216-4a55-b43c-9d64ade852f7 06/11/2017 10:21 goodreads.com gr-assets.com samplicio.us 3 01faca75-1216-4a55-b43c-9d64ade852f7 06/11/2017 10:21 gr-assets.com itunes.apple.com samplicio.us 5 01faca75-1216-4a55-b43c-9d64ade852f7 06/11/2017 10:23 itunes.apple.com samplicio.us samplicio.us名为“最终目的地”的附加列。这是为了让我将 3 笔交易组合在一起,作为到达 samplicio.us 的路径。
提前致谢。
【问题讨论】:
-
如果recordid 2和record 3上的时间戳是10:22,record 4上的时间是10:23,那么预期的结果会改变吗?我想弄清楚什么时候“跳过”一条记录?
-
是的,我也注意到了。所以我的跳过将是这个。如果记录 1 显示域 A,记录 2 显示域 A,记录 3 显示域 B,结果将显示 From Source, Domain A 到 Source Domain B。我想要做的是捕捉有人进入站点的那一刻,然后移动到另一个站点。目前他们在网站内做什么并不重要。
-
用户是否由 RespondentID 和 DeviceID 识别? ID 系统是否生成唯一标识符,可以用来判断每个用户哪个是较早的记录?
-
是的,用户由 RespondentID 和 DeviceID 标识。时间戳由捕获此运动的系统生成。一些动作更长,即,我们可以看到几秒钟或几分钟,但它们现在是根据顺序排序的。同一受访者可以拥有不同的设备,他们在这些设备上的移动被视为不同的用户。
标签: sql database postgresql