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