0

尝试四处寻找没有运气,也许我只是没有使用正确的术语。无论如何,我正在使用 postgresql 8.1 数据库(redshift),其中数据样本如下所示:

User ID   Timestamp    Visit ID
1         05:20:20am   10
2         05:21:00am   11
1         05:22:14am   12
1         05:24:09am   13

假设这是一个非常基本的数据样本。我想分析人们在第一次访问、第二次访问、第三次访问等时在其他指标上的表现。我能想到的最简单的方法是创建一个单独的表格,如下所示:

Visit ID    Visit Number
10          1
11          1
12          2 
13          3 

或者以某种方式附加到我的原始表格:

User ID   Timestamp    Visit ID    Visit Number
1         05:20:20am   10          1
2         05:21:00am   11          1 
1         05:22:14am   12          2
1         05:24:09am   13          3

我知道我可以使用 groupby 和 count 来分析那些访问次数至少为 x 次的访问者与访问次数较少的访问者的性能。但是,我不知道如何分析第一次、第二次、第三次访问的性能,尤其是当用户可能访问过 1-50,000 次时。

因此,我想回答一个示例问题……对于至少访问 10 次的用户,他们在前 5 次访问还是在第二次访问时表现更好?

非常感谢您的建议,这个网站很棒。

谢谢。

4

1 回答 1

1

一个(可能很慢)选项是使用相关子查询:

SELECT  t.UserID, 
        t.Timestamp, 
        t.VisitID,
        (   SELECT  COUNT(*) + 1
            FROM    T T2
            WHERE   T2.UserID = T.UserID
            AND     T2.TimeStamp < T.TimeStamp
        ) VisitNumber
FROM    T;

SQL Fiddle 示例

最简单(尽管可能不可行)的解决方案是升级到 Postgresql 8.4 或更高版本并利用 ROW_NUMBER:

SELECT  t.UserID, 
        t.Timestamp, 
        t.VisitID,
        ROW_NUMBER() OVER(PARTITION BY t.UserID ORDER BY t.Timestamp) AS VisitNumber
FROM    T;

SQL Fiddle 示例

最后,如果第一个查询太慢,并且升级不是一种选择,那么下面的文章将详细介绍另一种选择。我不知道这将如何执行。

http://www.depesz.com/2007/08/17/rownum-anyone-cumulative-sum-in-one-query/

于 2013-10-08T16:13:17.903 回答