如何根据同一 table 中的另一列获取不同的值?

How to obtain distinct values based on another column in the same table?

我不确定如何正确表达标题,如果一开始不清楚,请见谅。

我想做的是找到登录到特定页面的用户,而不是其他页面。

我的table是这样的:

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 的用户?

提前致谢!

稍后我会尝试改进您的问题的标题,但目前,这就是我完成您所要求的内容的方式:

查询:

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

Returns:

User_2

评论:

  1. 我基本上使用子查询来过滤掉您不关心的用户名。 :)
  2. 时间范围只得到 1 个结果,您可以通过删除查询第一行中的 "distinct" 来测试。如果您随后从查询中删除时间范围,您将获得 2 个结果。

您可以使用 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

用您想要的 date/time 间隔替换点。