在項目中要查詢用戶最近登陸的一條記錄的 ipsql
直接寫以下 SQL: 測試
SELECT ip,MAX(act_time) FROM users_login GROUP BY login_id;
可是這樣是取不出用戶登陸記錄中時間最大的那個 ip , 僅僅只是查到了最大時間,和 ip 不要緊code
找了至關多的文章,通過本身測試,發現一個比較好的方式處理這個問題,舉例以下:blog
如今假設有一張數據表 A , 字段和數據以下:排序
姓名(name) | 身份證(惟一標識)(id) | 購買產品(pro) | 價格(price) | 數量(count) | 購買時間(time) |
張1 | 111111 | Computer | 1600 | 5 | 2018-03-03 |
張1 | 11111 | Phone | 12 | 12 | 2018-03-05 |
張2 | 22222 | Pipe | 1 | 234 | 2018-03-04 |
張2 | 22222 | Computer | 1600 | 5 | 2018-03-05 |
張3 | 33333 | Phone | 12 | 12 | 2018-03-03 |
張3 | 33333 | Pipe | 1 | 234 | 2018-03-06 |
張3 | 33333 | Computer | 1600 | 5 | 2018-03-09 |
張4 | 44444 | Phone | 12 | 12 | 2018-03-09 |
張5 | 55555 | Pipe | 1 | 234 | 2018-03-02 |
在這張數據表中,咱們須要查詢表中每個用戶在最後一次都購買了什麼產品以及相關信息索引
SQL語句以下:ip
SELECT * from (SELECT * FROM A ORDER BY time) a GROUP BY a.id;
解釋:產品
在這裏,咱們首先對 A 表進行按照時間的順序排序,這樣咱們能夠把每一個用戶最後一次購買記table
錄排在最上面,排序以後再嵌套一層查詢,這一層查詢使用 GROUP BY 語句。在使用GROUP class
BY 語句的時候,他會按照分組將你排過序的數據的第一條取出來,這樣就比較符合條件了,這種
方式在添加索引的狀況下效率至關快