2015-07-05 28 views

回答

0

你的問題具體說「稍後」。這不能用你的數據格式完成,因爲SQL表代表無序集。而且,您沒有指定排序的列。

如果你想得到-1的值,並排除那些1,有幾種方法。一種是使用not exists

select t.* 
from dbtable t 
where allot = -1 and 
     not exists (select 1 
        from dbtable t2 
        where t2.id = t.id and t2.allot = 1 
       ); 

如果以後發現確實有記錄的排序(如createdat)一列,那麼你可以很容易地修改此來:

select t.* 
from dbtable t 
where allot = -1 and 
     not exists (select 1 
        from dbtable t2 
        where t2.id = t.id and t2.allot = 1 and 
         t2.createdat > t.createdat 
       ); 
0
SELECT `id`, `branch`, MAX(`allot`) 
FROM `table` 
GROUP BY `id` 
WHERE `allot` = -1 

這樣,當同一座位上存在2行時,選擇其中allot = 1(自MAX開始)的那一行,然後它最終從選擇(從WHERE開始)被刪除。

+0

這個id分配爲-1(意思是座位是保留的),但是同一個id稍後分配爲1(意思是之前保留的座位現在被取消)現在不應該考慮。 –

+0

那又如何?是的,這正是你用我建議的查詢得到的結果。更確切地說,從你最初的帖子中的例子中,你只會得到'id's 2和3。 – cFreed