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

2021-08-29 09:35:24 字數 1094 閱讀 4715

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

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最大一條記錄。這樣就很好的實現了批量查詢最近記錄,並且僅僅需要遍歷一次表,即使在資料量巨大的情況下也可以在很短的時間查出結果

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

資料庫中隨機查詢一條記錄的SQL

資料庫的隨機查詢sql 1.oracle,隨機查詢20條 select from select from 表名 order by dbms random.value where rownum 20 2.ms sql server,隨機查詢20條 select top 20 from 表名order ...

關於資料庫Group By取最新一條資料

根據欄位super find id分組查詢opt time最新的一條資料,如以上示例表中期望查詢結果為第2條。select b.super find id,max b.opt time as opt time from info super feedback b group by b.super f...

sql 分組後重複資料取時間最新的一條記錄

max id 注意id必須使用聚合函式max pid,max time as desc 降序是為了where keyid 1 1是固定值第一條 如果公升序由於不知道每組多少條where中keyid就無法過濾了 as keyid,drop table if exists tmptable 存在表則刪除...