MySQL挑出多行
我有一个记录用户事件的数据库。 简化的表格如下所示MySQL挑出多行,mysql,Mysql,我有一个记录用户事件的数据库。 简化的表格如下所示 userid eventtype lastupdate 1 sent 5 1 opened 10 1 clicked 15 2 sent 5 3 sent 5 我正在尝试获取用户ID,该用户ID具有已发送的事件类型,但不具有在lastupdate范围内打开或单击
userid eventtype lastupdate
1 sent 5
1 opened 10
1 clicked 15
2 sent 5
3 sent 5
我正在尝试获取用户ID,该用户ID具有已发送的事件类型,但不具有在lastupdate范围内打开或单击的事件类型
SELECT * FROM table WHERE (`eventtype` != "opened" AND (`lastupdate` BETWEEN 0 AND 10)) OR (`eventtype` != "clicked" AND (`lastupdate` BETWEEN 0 AND 10))
就我所知,但显然不起作用,因为它将获取用户ID 1、2和3
而我希望它只抓取2和3
实际的表要复杂得多,因为它还必须处理连接和其他一些列,但如果我们能找出这一部分,我就可以完成其余部分。如果您想找出用户ID,并且我以文字形式回答您的问题,那么这应该是您要寻找的:
SELECT user_id
FROM events
WHERE eventtype NOT IN ('opened', 'clicked')
AND lastupdate BETWEEN 0 AND 10
GROUP BY user_id;
这实际上也会选择用户ID 2和3,因为它们也发送了匹配的事件…在不使用任何exists子句的情况下尝试此操作,也许它适合您的需要
select *
from tst
where userid not in (
select userid from tst where eventtype in ('opened', 'clicked'))
and lastupdate between 0 and 10;
已测试:您可以使用不存在的
进行测试:
SELECT *
FROM mytable AS t1
WHERE lastupdate BETWEEN 0 AND 10
AND eventtype = 'sent'
AND NOT EXISTS (SELECT 1
FROM mytable AS t2
WHERE t1.userid = t2.userid
AND t2.lastupdate BETWEEN 0 AND 10
AND t2.eventtype IN ('opened', 'clicked'))
以上将选择用户:
- 其
lastupdate
的介于0和10之间
和
- 在此时间间隔内有一个
eventtype='sent'
和
- 在同一时间间隔内,没有('opened'、'clicked')
事件类型
用户
2
和3
都具有已发送的事件类型,但在一个范围的lastupdate之间没有打开或单击的事件类型。所以你的查询也应该选择它们,还是不选择?这很好。从这个表中,我只想返回userid 3和2用户2
和3
具有相同的evettype
和lastupdate
数据。那么为什么不应该选择3
?对不起。我是说2和3。今天是星期五>。如果我不清楚,我很抱歉。这个问题使我感到非常恼火。如果我们看这个示例表,我希望它返回userid2和userid3。(非活跃用户)对不起,但那条附加的评论让问题更加困惑。上面你先说所有用户,然后不是2和3,现在只有2和3。我放弃了,没问题@Giorgos Betsos明白我的意思,他提供了一个解决方案。谢谢你的时间和努力。非常感谢。谢谢,这看起来是正确的方向。问题是我还必须将表内部连接起来。但这不会起作用,对吗:选择*FROM email\u list\u subscriber内部加入email\u list\u subscriber\u events ON email\u list\u subscriber\u subscriberid=email\u list\u subscriber\u events.subscriberid,因为它工作正常。你回答了我的问题。我仍然需要它与另一个表连接,但这超出了这个问题的范围。谢谢你的帮助