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,因为它工作正常。你回答了我的问题。我仍然需要它与另一个表连接,但这超出了这个问题的范围。谢谢你的帮助