MySQL - 查找用户的第一个推荐人

时间:2012-01-06 05:59:44

标签: mysql sql

我有一个创意查询请求,只有几个我自己的例子。

我有一个表,用以下字段记录用户的点击次数:

  • id每次记录的匹配的唯一值
  • referrer网址的文字值
  • date unix时间戳的整数值
  • unique一个唯一标识用户的字符串(基本上是IP + salt的md5)

(请注意,我意识到使用“unique”作为字段名称最终会成为一个糟糕的设计选择,但将其放在反引号中有助于避免任何问题......)

我想查询一个返回unique s列表及其第一个引荐来源的查询。

2 个答案:

答案 0 :(得分:1)

如果您没有hit_id字段,则必须使用(uniquedate)对作为行标识符。你应该能够得到你想要的东西。

SELECT `referrer` FROM `hits` h1 INNER JOIN 
    (SELECT `unique`, MIN(`date`) FROM `hits` GROUP BY `unique`) h2
ON h1.`unique` = h2.`unique` AND h1.`date` = h2.`date`
GROUP BY `referrer`

如果你有一个你没有提到的主键,比如hit_id,它会变得更短,并且可以避免出现同一个用户在同一秒内发生两次点击的罕见情况:

SELECT `referrer` FROM `hits` h1 INNER JOIN 
    (SELECT MIN(`hit_id`) FROM `hits` GROUP BY `unique`) h2
ON h1.`hit_id` = h2.`hit_id`
GROUP BY `referrer`

在这两种情况下,最后一个GROUP BY只是删除最终结果集中的重复项。

答案 1 :(得分:1)

如果您按日期查看每个用户的第一个推荐人,您可以执行以下操作:

CREATE TEMPORARY TABLE tmp_hits
SELECT
  `unique`
, `date`
, `referrer`
FROM log_table
ORDER BY `date` ASC
;

SELECT
  `unique`
, `referrer`
FROM tmp_hits
GROUP BY `unique`
;