0
我有表名爲sessions
是select
查詢返回此:SQL查詢,如何選擇開,盤中
id name state -------------------- 1 n1 open 2 n2 open 3 n1 close 4 n3 open
我想返回剛纔打開的會話的查詢。 (n2
和n3
)。 我試圖inner join
會話表,自己卻沒有作品...
我有表名爲sessions
是select
查詢返回此:SQL查詢,如何選擇開,盤中
id name state -------------------- 1 n1 open 2 n2 open 3 n1 close 4 n3 open
我想返回剛纔打開的會話的查詢。 (n2
和n3
)。 我試圖inner join
會話表,自己卻沒有作品...
試試這個:
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'
狀態記錄。
返回,如果狀態是打開的,並最遲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)
是id順序很重要?如果幾個開放的,少了幾個關閉?等等。添加更多樣本數據,使事情變得複雜 - 並調整預期結果。 – jarlh