1. 程式人生 > >sql 查資料庫中時間最新的一條記錄

sql 查資料庫中時間最新的一條記錄

下策——查詢出結果後將時間排序後取第一條

select * from a 
where create_time<="2017-03-29 19:30:36" 
order by create_time desc
limit 1

這樣做雖然可以取出當前時間最近的一條記錄,但是一次查詢需要將表遍歷一遍,對於百萬以上資料查詢將比較費時;limit是先取出全部結果,然後取第一條,相當於查詢中佔用了不必要的時間和空間;還有如果需要批量取出最近一條記錄,比方說:“一個訂單表,有使用者,訂單時間,金額,需要一次性查詢所有使用者的最近的一條訂單記錄”,那麼每個使用者一次查詢就要做一次整表的遍歷,資料大的情況下,時間將會以指數形式增長,不能投入實際使用。

中策——查詢排序後group by

select * from (
  select * from a
  where create_time<="2017-03-29 19:30:36" 
  order by create_time desc
)  group by user_id

後來發現使用group by 可以根據group by 的引數列分組,但返回的結果只有一條,仔細觀察發現group by是將分組後的第一條記錄返回。時間在查詢後預設是順序排列,因此需要先將時間倒序排列,方可取出距離當前最近一條。

這樣查詢實際上還是進行了兩次查詢,雖然時間上相比第一個方法有了質的飛躍,但是還可以進一步優化。

上策——將max() 方法和group by結合使用

select *,max(create_time) from a
where create_time<="2017-03-29 19:30:36" 
group by user_id

這句可以理解為將結果集根據user_id分組,每組取time最大一條記錄。這樣就很好的實現了批量查詢最近記錄,並且僅僅需要遍歷一次表,即使在資料量巨大的情況下也可以在很短的時間查出結果

 

如果是主鍵子自增, 則可以直接求主鍵的最大值