先group by得到分組每乙個的max(id)
,即是最新記錄,之後通過inner join
關聯得到最新記錄表。執行效率:0.031 sec
select b.*
from table_name b
inner join (select max(id) as id
from table_name
group by mac) a on a.id = b.id
這個方法也是網上看到的,先order by
然後group by
,這個操作一定要加limt
,不然結果不是最新記錄,顯然這個方法的缺陷很明顯,分組數超過了limit數,就出問題了。執行效率:0.719 sec
select a.*
from (select * from table_name order by create_time desc limit 10000) a
group by a.mac
這個方法是在方法一的基礎上關聯條件新增了group by的字段。執行效率:0.016 sec
select t1.*
from table_name t1
inner join (
select max(id) as id,mac
from table_name t1
group by mac
) t2
on t2.mac = t1.mac
and t2.id = t1.id
參考:sql - mysql fast retrieve last record in each group - stack overflow MySQL之分組查詢(GROUP BY)
在 mysql select 語句中,允許使用 group by 子句,將結果集中的資料行根據選擇列的值進行邏輯分組,以便能彙總表內容的子集,實現對每個組而不是對整個結果集進行整合。語法格式如下 group by asc desc 語法說明如下 注意 group by 子句中的各選擇列必須也是 se...
group by 查詢原理
select classes id,count name as number from stu group by classes id查詢結果是 那麼臨時表在 呢?1 分析一下查詢語句,需要查詢表中的班級名稱以及每個班級對應的學生的數量。首先,sql語句會產生第一張臨時表,找到所有的classid ...
MYSQL使用group by,如何查詢出總記錄數
select t.report date t.user id from my table t group by t.user id,t.report date比如有這樣一條sql,根據t.user id,t.report date兩個字段統計 這樣前端頁面能展示資料,但往往需要乙個總記錄數,在有分頁...