给出以下表格: 时间戳,用户,site_id
对于每个站点,我想找到上次访问该站点的唯一身份用户数。
我发现每个站点的唯一身份用户数。 但与上次登录名不符,并且用户在每个站点中可以唯一。
SELECT site_id, COUNT(DISTINCT user_id)
FROM SWE
GROUP BY site_id
ORDER BY COUNT(*);
请帮助。谢谢
答案 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;