2015-11-07 122 views
0

我有一個簡單的任務,我被困住了。 我有表login_history枚舉類型和MySQL

`login_history_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
`login_action` enum('login','logout') NOT NULL, 
`user_id` int(11) unsigned NOT NULL, (this one is foreign key) 

任務:編寫一個查詢將找到誰曾在週三大部分註銷在2012年9月

用戶正如你可以看到我有login_action這是枚舉類型,我需要找到哪個用戶對某些特定的日子最註銷。這是我迄今所做的我只需要在正確的方向輕輕一推,有人告訴我,我錯了我在這裏..

SELECT fullname FROM user WHERE user_id = (
SELECT user_id FROM login_history WHERE (user_id,login_action) = (
    SELECT user_id, COUNT(login_action) FROM login_history WHERE login_action = 'logout' AND login_time = (
     SELECT login_time FROM login_history WHERE YEAR(login_time) = 2012 AND MONTH(login_time) = 9 AND DAYOFWEEK(login_time) = 3))); 

回答

0

試試這個:

select u.fullname from (select count(*) n,user_id 
from login_history where 
login_time between '2012-09-01' and '2012-10-01' and dayofweek(login_time) = 3 and login_action = 'logout' 
group by user_id order by n desc limit 1) a, user u where a.user_id = u.user_id 

要獲得良好性能,請確保您在login_time列上具有密鑰。

+0

我的主要問題是如何獲得最大的註銷一些USER_ID和註銷是login_action這是枚舉類型的值..也許我使用 SELECT MAX(login_action) FROM login_history WHERE login_action =「退出」? – Constantine1001