例如有一個 版本號的登陸日誌表,loginlog( id, LoginName, Resource, IP, LoginTime, loginversion) ,
id 爲 自動增長字段,loginname爲登陸用戶名, logintime 爲最近一次登陸時間,loginversion爲登陸的版本號
現在要求 選出 每個用戶名的最近一次登陸的版本號(注意:用戶名不能重複且必須覆蓋所有數據庫表中的用戶),現貼出查詢代碼如下
SELECT * FROM (select * from loginlog order by LoginTime desc) login group by LoginName order by LoginTime desc ;
但當加入查詢條件的時候,例如
where Resource='qq' and LoginTime >= '2013-10-17 00:00:00' and LoginTime <= '2013-10-23 23:59:59';
group by的查詢條件用having
SELECT * FROM (select * from loginlog order by LoginTime desc) login group by LoginName having 1=1 and resource = 'qq' and LoginTime >= '2013-10-17 00:00:00' and LoginTime <= '2013-10-23 23:59:59' order by LoginTime desc ;
則問題解決,附where和having的區別:
having 和where 都是用來篩選用的
having 是篩選組 而where是篩選記錄
他們有各自的區別
1》當分組篩選的時候 用having
2》其它情況用where