groupby查詢分組後按條件查詢所需要的記錄

2021-08-03 22:33:04 字數 1117 閱讀 6655

表結構

userlog

idint

userid

intlogtime

timestamp

一、按userid分組 查詢每個使用者最新一條登入記錄 1.

select a.* from userlog a,(select userid,max(logtime) logtime from userlog group by userid) b where a.userid = b.userid and a.logtime = b.logtime;2.

select a.* from userlog a inner join(select userid,max(logtime) logtime from userlog group by userid) b on a.userid = b.userid and a.logtime = b.logtime;

1和2在資料較少的情況下效率近似,資料量較大時建議使用2方式。 3.

select a.* from userlog a where not exists(select 1 from userlog where userid = a.userid and logtime > a.logtime); 4.

select a.* from userlog a where logtime = (select max(logtime) from userlog where userid = a.userid); 5.

select a.* from userlog a where 1 > (select count(*) from userlog where userid = a.userid and logtime > a.logtime );

1,2,3,4,5都屬於帶子查詢的sql,其中1和2 是 關聯子查詢,先根據子查詢查詢出臨時表,再根據表連線查詢出對應的結果

3,4,5屬於巢狀子查詢 先在外部查詢中取得一條記錄的userid和logtime,然後執行子查詢,條件就是子查詢中的userid的值與外部剛才取到的值一樣的所有記錄的logtime欄位的最大值,

也就是說對於外部的每一條記錄都需要通過一次子查詢,這嚴重影響了查詢的效率

更多其他詳細的查詢

group by分組查詢小結

下面這樣查的話只能查詢到一條記錄 select id groupcode,hotelcode,accountno,reservephone,reservename,roomno,roomtype from res roomresource where id in select min id from...

MySQL之分組查詢(GROUP BY)

在 mysql select 語句中,允許使用 group by 子句,將結果集中的資料行根據選擇列的值進行邏輯分組,以便能彙總表內容的子集,實現對每個組而不是對整個結果集進行整合。語法格式如下 group by asc desc 語法說明如下 注意 group by 子句中的各選擇列必須也是 se...

Python在groupby分組後提取指定位置記錄

在進行資料分析 資料建模時,我們首先要做的就是對資料進行處理,提取我們需要的資訊。下面為大家介紹一些groupby的用法,以便能夠更加方便地進行資料處理。我們往往在使用groupby進行資訊提取時,往往是求分組後樣本的一些統計量 max min,var等 如果現在我們希望取一下分組後樣本的第二條記錄...