如何根据同一 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 个结果,您可以通过删除查询第一行中的 "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 间隔替换点。
我不确定如何正确表达标题,如果一开始不清楚,请见谅。
我想做的是找到登录到特定页面的用户,而不是其他页面。
我的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 个结果,您可以通过删除查询第一行中的 "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 间隔替换点。