帮助mysql选择查询

时间:2011-02-06 08:31:44

标签: mysql

我正在尝试做什么:

来自这些表格

---------------------------------
name      date      state
---------------------------------
ali      jan 12    started

ali      jan 12    drop out

masa     jan 12    registered

masa     jan 12    started

sami     jan 12    started

我希望结果是

---------------------------------
name      date      state
---------------------------------
masa     jan 12     started

sami     jan 12     started

所以基本上我想要的是让所有已启动的用户没有退出的用户 所以过滤应该基于状态 感谢

4 个答案:

答案 0 :(得分:3)

结果示例中的这两行不是该日期唯一启动的人。

SELECT * FROM table WHERE state = 'started';

将返回3行:

---------------------------------
name      date      state
---------------------------------

ali      jan 12     started

masa     jan 12     started

sami     jan 12     started

要获得示例中的两行,您需要:

SELECT * FROM table WHERE name IN ('sami', 'mesa');

更新,添加了此示例

如果您只想要两行,则可以限制:

SELECT * FROM table WHERE state = 'started' LIMIT 2;

答案 1 :(得分:2)

也许你需要的是以下几行......

SELECT NAME,
       DATE,
       STATE
   FROM MYTAB
   WHERE STATE = 'Started' AND
         NOT EXISTS (SELECT *
                         FROM MYTAB MYTAB2
                         WHERE MYTAB2.NAME  = MYTAB.NAME AND
                               MYTAB2.STATE = 'Drop Out');

这应该让所有开始并且没有退学的人。

答案 2 :(得分:1)

SELECT name, date, state FROM table GROUP BY name HAVING state = 'started';

我相信这会消除最终退出的人,因为GROUP BY会将同名的人放入同一个群组,然后一旦他们退出HAVING语句就消除它们。

答案 3 :(得分:0)

  select * from table where state != 'dropped out'