2016-02-12 60 views
0

以下是我的數據庫表,我將在其中出現用於出席會議室的簽入和簽出條目記錄。MySQL查詢查找仍在房間內的用戶

id registration_id roomno day type 
1 101    1  2 In 
2 103    1  2 In 
3 101    1  2 Out 
4 105    1  2 In 
5 103    1  2 Out 
6 101    1  2 In 
7 103    1  2 In 
8 101    1  2 Out 
9 105    1  2 In 
10 103    1  2 Out 

現在,我想選擇那些仍在參加會議的記錄。條件就像他們最後的記錄應該是type = In。在一天中,每個用戶可以有多個輸入/輸出條目。

請讓我知道最快的MySQL查詢。

感謝

答案,我最終使用:

select * from `registrations_inouts` t 
group by t.registration_id 
having max(id) = max(case when type = 'In' then id end) 
order by rand() limit 1; 

回答

3

這裏使用not exists一個方法:

select * 
from t 
where t.type = 'In' and 
     not exists (select 1 
        from t t2 
        where t2.registration_id = t.registration_id and t2.type = 'Out' 
       ); 

另一種方法是使用有條件聚集:

select t.registration_id 
from t 
group by t.registration_id 
having max(id) = max(case when type = 'In' then id end); 

注意:這兩個都假定id是按順序分配的,因此較大的id在以後的時間。

+0

這工作就像一個魅力,感謝您的快速回應:) –