下面是我的左表,用户
。
id name
1 a
2 b
3 c
下面是我的右表user_present
id user_id created_at
1 1 2016-12-01 00:00:00
2 2 2016-12-01 01:00:00
3 2 2016-12-02 03:00:00
4 1 2016-12-04 00:00:00
6 1 2016-12-05 00:00:00
7 1 2016-12-06 00:00:00
8 1 2016-12-07 00:00:00
9 1 2016-12-08 00:00:00
10 2 2016-12-08 00:00:00
11 2 2016-12-08 10:59:59
12 2 2016-12-09 10:59:59
如何编写联接查询来获取以下用户作为结果,即本周出现次数少于 5 次的用户?假设当前日期是2016-12-09
id name
2 b
3 c
用户a
不会被包含在内,因为它在2016-12-04
和2016-12-10
之间在右表中出现了5次> 这是本周。我们只得到用户 b
和 c
,因为 b
在本周只出现了 3 次,前 2 次是在上周。那不算。我们也得到了 c
,因为 c
尚未出现在右表中。
最佳答案
使用having
子句和count
与条件,试试这个:
select
u.*
from `user` u
left join user_present up
on u.id = up.user_id
group by u.id, u.name
having count(
case
when week(up.created_at) = week('2016-12-09 00:00:00') then 1
else null
end
) < 5
参见demo在这里。
关于mysql - SQL如何选择本周内其id在右表中出现次数少于5次的左表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41056506/