Для каждого сайта найдите уникальное количество пользователей, которые последний раз посещали этот сайт. - PullRequest
0 голосов
/ 15 мая 2019

с учетом следующей таблицы: отметка времени, user, site_id

Для каждого сайта я хочу найти количество уникальных пользователей, которые последний раз посещали этот сайт.

Я нашелколичество уникальных пользователей на сайт.но не соответствует последнему логину и пользователь может быть уникальным на каждом сайте ..

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

Пожалуйста, помогите.Спасибо

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы можете использовать коррелированный подзапрос здесь:

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;

Подзапрос находит для каждого пользователя и сайта максимальную (самую последнюю) метку времени для этой комбинации.Только записи с самой последней отметкой времени для данного пользователя и сайта учитываются при отдельном подсчете.

0 голосов
/ 15 мая 2019

Используйте подзапрос для получения последнего посещения и проверки на сайте:

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;
...