Как получить различные значения на основе другого столбца в той же таблице? - PullRequest
0 голосов
/ 13 мая 2019

Я не уверен, как правильно произнести название, поэтому извините, если сначала он не был понятен.

Я хочу найти пользователей, которые вошли на определенную страницу, но не на другую.

Таблица у меня выглядит так:

Users_Logins
------------------------------------------------------
| IDLogin | Username | Page  | Date       | Hour     |
|---------|----------|-------|------------|----------|
| 1       | User_1   | Url_1 | 2019-05-11 | 11:02:51 |
| 2       | User_1   | Url_2 | 2019-05-11 | 14:16:21 |
| 3       | User_2   | Url_1 | 2019-05-12 | 08:59:48 |
| 4       | User_2   | Url_1 | 2019-05-12 | 16:36:27 |
| ...     | ...      | ...   | ...        | ...      |
------------------------------------------------------

Итак, как вы можете видеть, пользователь 1 вошел в URL 1 и 2, а пользователь 2 вошел только в URL 1.

Как мне найти пользователей, которые вошли в Url 1, но никогда не заходили в Url 2 в течение определенного периода времени?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Вы можете сделать это с помощью group by username и применить условия в предложении HAVING:

select username 
from User_Logins  
where
  date between '..........' and '..........'  
  and 
  hour between '..........' and '..........';
group by username
having 
  sum(page = 'Url_1') > 0
  and 
  sum(page = 'Url_2') = 0

Замените точки на нужные интервалы даты / времени.

2 голосов
/ 13 мая 2019

Я постараюсь улучшить название вашего вопроса позже, но пока я так выполнил то, о чем вы просите:

Запрос:

select distinct username from User_Logins  
where page = 'Url_1'  
and username not in  
    (select username from User_Logins  
    where Page = 'Url_2')  
and date BETWEEN '2019-05-12' AND '2019-05-12'  
and hour BETWEEN '00:00:00' AND '12:00:00';

Возвращает:

User_2

Комментарии:

  1. Я в основном использовал подзапрос, чтобы отфильтровать имена пользователейтебя не волнует:)
  2. Временной диапазон получает только 1 результат, который вы можете проверить, удалив «отличные» в первой строке запроса.Если затем удалить временной интервал из запроса, вы получите 2 результата.
...