您如何找到首次访问/最后访问是同一网站的用户数量

时间:2019-05-15 08:05:15

标签: postgresql

给出timestamp,user_id,country,site_id表。 您如何找到首次访问/最后访问相同网站的用户数量?

/* unique users first site*/
SELECT ts,SWE.site_id, SWE.user_id
FROM SWE
WHERE SWE.ts = (
    SELECT MIN(t.timestamp)
    FROM SWE t
    WHERE
      t.user_id = SWE.user_id
  )

/* unique users last site*/
SELECT ts,SWE.site_id, SWE.user_id
FROM SWE
WHERE SWE.ts = (
    SELECT max(t.timestamp)
    FROM SWE t
    WHERE
      t.user_id = SWE.user_id
  )

我不确定这些相等时如何计数?

1 个答案:

答案 0 :(得分:0)

我将使用DISTINCT ON运算符为每个用户选择首次访问/最后访问,然后对这些访问进行汇总以检查它们是否不同。像这样:

WITH first_visits AS (
  SELECT DISTINCT ON (user_id) * FROM user_visits
  ORDER BY user_id, timestamp
), last_visits AS (
  SELECT DISTINCT ON (user_id) * FROM user_visits
  ORDER BY user_id, timestamp DESC
)
SELECT user_id,
  array_to_string(array_agg(DISTINCT site_id), ', ') AS sites,
  MIN(timestamp) AS first_visit, MAX(timestamp) as last_visit
FROM (
  SELECT * FROM first_visits
  UNION ALL
  SELECT * FROM last_visits) x
GROUP BY user_id
HAVING COUNT(DISTINCT site_id) = 1;