gpt4 book ai didi

sql-server - TSQL 时间序列模式数据挖掘

转载 作者:行者123 更新时间:2023-12-05 00:11:56 25 4
gpt4 key购买 nike

取一个包含以下 3 个字段的 SQL 表:

Id,TimeStamp,Item,UserId

我想确定 Item 的最常见序列对于 UserId在一个 session 中。 session 将简单地由时间阈值定义(即,如果 X 分钟内没有整体,则任何 future 的条目都将被分组到一个新 session 中)。

理想情况下,项目序列可以具有一种模糊分组,其中序列中的一个或两个差异仍然可以被视为相同并分组在一起。

任何人都知道我可以如何在 SQL 中解决这个问题?

更新:
为了澄清,让我们假设这些项目是杂货店小岛。我有一个月的人去杂货店。基本问题是人们正在使用什么岛屿以及它的顺序。他们去小岛吗 1,2,31,2,1,3,4最常用?

(现在我对我们网站上的用户路径很好奇,但你知道,杂货店更直观)。

更新 2:
这是一个简单的案例:
CREATE Table #StoreActivity
(
id int,
CreationDate datetime ,
Isle int,
UserId int
)

Insert INTO #StoreActivity
Values
(1, CAST('12-1-2011 03:10:01' AS Datetime), 1, 2222),
(2, CAST('12-1-2011 03:10:07' AS Datetime), 1, 1111),
(3, CAST('12-1-2011 03:10:12' AS Datetime), 2, 2222),
(4, CAST('12-1-2011 04:10:01' AS Datetime), 1, 2222),
(5, CAST('12-1-2011 04:10:23' AS Datetime), 2, 2222)

Select * from #StoreActivity
DROP Table #StoreActivity

/* So with the above data, we have 2 sequences if we declare a session or visit dead if there is no activity for a minute : `1,2` (With a count of 2), and `1` (with a count of 1)*/

最佳答案

WITH    q AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY TimeStamp, Id) AS rn,
ROW_NUMBER() OVER (PARTITION BY UserId, Item ORDER BY TimeStamp, Id) AS rnd
FROM mytable
)
SELECT *,
rnd - rn AS sequence
FROM q
sequence列将在给定 UserId 的序列中的所有记录之间共享.您可以对其进行分组或做任何您喜欢的事情。

关于sql-server - TSQL 时间序列模式数据挖掘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5743467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com