对于每个网站,查找上次访问该网站的唯一用户数

时间:2019-05-15 12:34:39

标签: sql postgresql subquery distinct

给出以下表格: 时间戳,用户,site_id

对于每个站点,我想找到上次访问该站点的唯一身份用户数。

我发现每个站点的唯一身份用户数。 但与上次登录名不符,并且用户在每个站点中可以唯一。

SELECT site_id, COUNT(DISTINCT user_id)
FROM SWE
GROUP BY site_id
ORDER BY COUNT(*);

请帮助。谢谢

2 个答案:

答案 0 :(得分:1)

您可以在此处使用相关子查询:

SELECT site_id, COUNT(*) AS unique_cnt
FROM SWE s1
WHERE timestamp = (SELECT MAX(timestamp) FROM SWE s2
                   WHERE s1.user_id = s2.user_id AND s1.site_id = s2.site_id)
GROUP BY site_id;

子查询为每个用户和站点查找该组合的最大(最新)时间戳。在唯一计数中仅考虑具有给定用户和站点的最新时间戳记的记录。

答案 1 :(得分:0)

使用子查询获取上次访问和对该网站的检查:

select site, count(*)
from t
where t.timestamp = (select max(t2.timestamp)
                     from t t2
                     where t2.user = t.user
                    ) 
group by site;

在Postgres中,我倾向于使用distinct on

select site, count(*)
from (select distinct on (user) t.*
      from t
      order by user, timestamp desc
     ) t
group by site;