程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了获取 FIRST_VALUE 和 LAST_VALUE 之间的范围大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决获取 FIRST_VALUE 和 LAST_VALUE 之间的范围?

开发过程中遇到获取 FIRST_VALUE 和 LAST_VALUE 之间的范围的问题如何解决?下面主要结合日常开发的经验,给出你关于获取 FIRST_VALUE 和 LAST_VALUE 之间的范围的解决方法建议,希望对你解决获取 FIRST_VALUE 和 LAST_VALUE 之间的范围有所启发或帮助;
时间戳 ID 范围
2021-01-23 12:52:34.159999 UTC 1 enter_page
2021-01-23 12:53:02.342 UTC 1 vIEw_product
2021-01-23 12:53:02.675 UTC 1 结帐
2021-01-23 12:53:04.342 UTC 1 search_page
2021-01-23 12:53:24.513 UTC 1 结帐

我正在尝试使用 windows/ANALYTICAL 函数获取列“范围”中 FirsT_VALUE 和 LAST VALUE 之间的所有值

我已经得到了 first_value() = enter_page
和 last_value() == 结帐

在 SQLite 中使用 windows 函数

FirsT_VALUE(scopE) OVER ( PARTITION BY ID ORDER BY julianday(timestamp) ASC) first_page
FirsT_VALUE(scopE) OVER ( PARTITION BY ID ORDER BY julianday(timestamp) DESC ) last_page

我正在尝试捕获 [不包括边] 之间的所有步骤:vIEw_product、apartment_vIEw、checkout[,N-fIEld] 稍后将它们添加到字符串中(唯一值 -STR_AGGR())

完成此操作后,我将在稍后处理尝试查找客户是否在购买过程中的某个时间点多次打开结帐

我的结果应该像

ID 第一页 最后一页 inbetween_pages
1 enter_page 结帐 查看产品、结帐、搜索页面

附言我试图避免使用 python 来处理这个。我想要一种“干净”的方式来使用 sql-pure

非常感谢大家

解决方法

嗯。 . .我在想:

SELEct id,GROUP_CONCAt(scope,',')
from (select t.*,row_number() over (partition by id order by timestamp) as seqnum_asc,row_number() over (partition by id order by timestamp desc) as seqnum_desc
      from t
      order by id,timestamp
     ) t
where 1 not in (seqnum_asc,seqnum_desc)
group by id;

在 SQLite 中GROUP_CONCAt() 不接受 order by 参数。我的理解是它尊重子查询的排序,这就是子查询具有 order by 的原因。

,

您可以使用支持 GROUP_CONCAT() 子句的 ORDER BY 窗口函数来做到这一点,因此您将以正确的顺序在 scope 中使用 inbetween_pages,而不是 {{ 1}} 不支持 GROUP_CONCAT() 子句的聚合函数,并且它返回的结果不能保证按特定顺序排列:

ORDER BY

参见demo。
结果:

id 第一页 最后一页 inbetween_pages
1 enter_page 结帐 view_product,checkout,search_page

大佬总结

以上是大佬教程为你收集整理的获取 FIRST_VALUE 和 LAST_VALUE 之间的范围全部内容,希望文章能够帮你解决获取 FIRST_VALUE 和 LAST_VALUE 之间的范围所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。