使用SQL中的用户ID丰富网站日志数据

时间:2011-05-14 17:38:37

标签: sql cookies

假设我们拥有来自网站的典型会话日志,其中包含Cookie和用户ID(如果他/她提供了凭据):

cookie      id  timestamp
af312b452c  .   31-03-11 1:44 PM
af312b452c  .   31-03-11 1:46 PM
af312b452c  .   31-03-11 1:48 PM
af312b452c  .   31-03-11 1:51 PM
af312b452c  .   31-03-11 1:53 PM
af312b452c  .   31-03-11 1:56 PM
af312b452c  1   31-03-11 1:58 PM
af312b452c  1   31-03-11 2:01 PM

31-03-11 1:58 PM - 用户已登录,因此我们将跟踪他/她的活动以及user_id。

我希望通过向后填充缺少的字段来丰富这些数据,以获得特定用户在网页上看到的完整信息:

cookie      id  timestamp
af312b452c  1   31-03-11 1:44 PM
af312b452c  1   31-03-11 1:46 PM
af312b452c  1   31-03-11 1:48 PM
af312b452c  1   31-03-11 1:51 PM
af312b452c  1   31-03-11 1:53 PM
af312b452c  1   31-03-11 1:56 PM
af312b452c  1   31-03-11 1:58 PM
af312b452c  1   31-03-11 1:58 PM

在SQL中执行此操作的最佳方式是什么?

注意:

  • 整个表有很多行,
  • 用户可以拥有多个Cookie。
  • 某个特定的Cookie值可能已在过去的某个时间点用于其他用户

提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

我首先要创建一个函数,它会让我获得cookie的最新登录ID,以及你记录该cookie的时间戳(psuedocode离开我的头顶,如果某些东西关闭就道歉):< / p>

CREATE FUNCTION getFutureLogin(in_cookie VARCHAR, in_timestamp DATETIME) RETURNS INT AS
BEGIN
  DECLARE logged_in_id IN

  SELECT logged_in_id = TOP 1 id
  FROM T_NAME
  WHERE cookie = in_cookie
  AND timestamp > in_timestamp
  AND id IS NOT NULL
  ORDER BY timestamp ASC

  RETURN logged_in_id
END

从那里开始,这是一个简单的更新,你可能会安排一份工作去做。

UPDATE T_NAME SET id = getFutureLogin(cookie, timestamp) WHERE id IS NULL

可能不是最直接或最快捷的方式,但它会起作用。