试着搜索没有运气,也许我只是没有使用正确的术语。无论如何,我正在使用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并计算那些至少来过x次的访问者和那些少来的访问者的性能分析。但是,我不知道如何在第一次,第二次,第三次访问时分析性能,特别是当用户可以访问1-50,000次时。
这是一个我想回答的示例问题...对于访问至少10次的用户,他们在前5次访问或第5次访问中表现更好吗?
非常感谢这个建议,这个网站很精彩。
感谢。
答案 0 :(得分: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;
<强> Example on 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;
<强> Example on SQL Fiddle 强>
最后,如果第一个查询太慢,并且升级不是一个选项,下面的文章将详细介绍另一个选项。我不知道这会如何表现。
http://www.depesz.com/2007/08/17/rownum-anyone-cumulative-sum-in-one-query/