2016-09-21 53 views
0

我有表名为sessionsselect查询返回此:SQL查询,如何选择开,盘中

 
id name state 
-------------------- 
1  n1  open 
2  n2  open 
3  n1  close 
4  n3  open 

我想返回刚才打开的会话的查询。 (n2n3)。 我试图inner join会话表,自己却没有作品...

+0

是id顺序很重要?如果几个开放的,少了几个关闭?等等。添加更多样本数据,使事情变得复杂 - 并调整预期结果。 – jarlh

回答

1

试试这个:

SELECT t1.* 
FROM mytable AS t1 
LEFT JOIN mytable AS t2 ON t1.name = t2.name 
      AND t2.state = 'close' 
WHERE t1.state = 'open' AND t2.id IS NULL 

上面的查询将返回所有'open'记录不匹配'close'状态记录。

Demo here

0

返回,如果状态是打开的,并最迟ID具有相同的名称,但闭合状态的名字:

select distinct name 
from sessions s1 
where state = 'open' 
    and not exists (select 1 from sessions s2 
        where s2.name = s1.name 
        and s2.state = 'close' 
        and s2.id > s1.id)