如何基于同一表中的另一列获取不同的值?

时间:2019-05-13 14:01:17

标签: mariadb heidisql

我不确定标题的正确用词方式,如果一开始不清楚,抱歉。

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

我的桌子看起来像这样:

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。

我应该如何查找在一段时间内未登录到网址1的用户?

谢谢!

2 个答案:

答案 0 :(得分: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';

返回:

User_2

评论:

  1. 我基本上使用了子查询来过滤出您不关心的用户名。 :)
  2. 时间范围仅获得1个结果,您可以通过删除查询第一行中的“ distinct”来进行测试。如果再从查询中删除时间范围,则会得到2条结果。

答案 1 :(得分: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

用所需的日期/时间间隔替换点。