在項目中要查詢用戶最近登錄的一條記錄的 ip
直接寫如下 SQL:
SELECT ip,MAX(act_time) FROM users_login GROUP BY login_id;
但是這樣是取不出用戶登錄記錄中時間最大的那個 ip , 僅僅只是查到了最大時間,和 ip 沒關系
找了相當多的文章,經過自己測試,發現一個比較好的方式處理這個問題,舉例如下:
現在假設有一張數據表 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語句如下:
SELECT * from (SELECT * FROM A ORDER BY time) a GROUP BY a.id;
解釋:
在這里,我們首先對 A 表進行按照時間的順序排序,這樣我們可以把每個用戶最后一次購買記
錄排在最上面,排序之后再嵌套一層查詢,這一層查詢使用 GROUP BY 語句。在使用GROUP
BY 語句的時候,他會按照分組將你排過序的數據的第一條取出來,這樣就比較符合條件了,這種
方式在添加索引的情況下效率相當快