我正在尝试做什么:
来自这些表格
---------------------------------
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
所以基本上我想要的是让所有已启动的用户没有退出的用户 所以过滤应该基于状态 感谢
答案 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'