MySQL中查詢時間最大的一條記錄

2021-09-11 21:06:13 字數 1675 閱讀 8813

在專案中要查詢使用者最近登入的一條記錄的 ip

直接寫如下 sql: 

selectip,max(act_time)fromusers_logingroupbylogin_id;

但是這樣是取不出使用者登入記錄中時間最大的那個 ip , 僅僅只是查到了最大時間,和 ip 沒關係

現在假設有一張資料表 a , 欄位和資料如下:

姓名(name)

身份證(唯一標識)(id)

購買產品(pro)

**(price)

數量(count)

購買時間(time)

張1111111

computer

1600

52018-03-03

張111111

phone

12    

12  

2018-03-05

張222222

pipe

1234

2018-03-04

張222222

computer

1600

52018-03-05

張333333

phone

1212

2018-03-03

張333333

pipe

1234

2018-03-06

張333333

computer

1600  

52018-03-09

張444444

phone

1212

2018-03-09

張555555

pipe

1234

2018-03-02

在這張資料表中,我們需要查詢表中每乙個使用者在最後一次都購買了什麼產品以及相關資訊

sql語句如下:

select*from(select*fromaorderbytime) agroupbya.id;

解釋:在這裡,我們首先對 a 表進行按照時間的順序排序,這樣我們可以把每個使用者最後一次購買記

錄排在最上面,排序之後再巢狀一層查詢,這一層查詢使用  group by 語句。在使用group 

by 語句的時候,他會按照分組將你排過序的資料的第一條取出來,這樣就比較符合條件了,這種

方式在新增索引的情況下效率相當快

mysql 5.7 以後,子查詢 order by不會被優化器執行,可以在子查詢中新增 limit解決

或者使用聚合函式:

select  *from  test t1 join (select t_id,max(time) as time from test  group by t_id) t2 on t1.t_id = t2.t_id 

**:

在mysql中查詢時間最小的一條記錄

1 首先下面這樣寫是錯誤的 select user id,min date time min time from ctoc tb group by user id 原因 這樣查詢出的資料date time確實是對應的最早時間,但是顯示出來的user id資訊,不是和最早時間date time對應的。...

MySQL中查詢時間差的寫法

計算日期間的時長,通過使用mysql的內建函式timestampdiff 實現。函式 timestampdiff 是mysql本身提供的可以計算兩個時間間隔的函式,語法為 timestampdiff unit,datetime expr1,datetime expr2 其中unit單位有如下幾種,分...

關於查詢表中時間最新的一條記錄

最近遇到乙個sql,要求表中時間最新的一條記錄 假設表名為 test 時間欄位為sj,姓名為xm,可以用以下語句 select from test a where a.sj select max b.sj from test b where b.xm a.xm 之前一直不理解這個查詢的處理流程,猜測...