2016-09-21 80 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)