MySQL子查詢排序失效如何解決?

MySQL子查詢排序失效如何解決?

mysql子查詢排序失效的解決方案

數(shù)據(jù)庫中存儲著大量用戶數(shù)據(jù),有時我們需要從這些數(shù)據(jù)中找出同一個用戶對同一個產(chǎn)品的最新記錄。然而,當(dāng)我們直接對子查詢進行排序時,排序結(jié)果可能不符合預(yù)期。

問題原因

mysql中,子查詢中的排序不會保留到外部查詢中。因此,當(dāng)我們對一個包含排序子查詢的外部查詢進行分組時,排序?qū)⑹А?/p>

解決方法

為了解決這個問題,我們可以使用一種雙重查詢的方法:

  1. 計算每個分組的最大時間戳
select   max(create_time) as max_create_time,   user_id,   product_id from   demo group by   user_id,   product_id
  1. 使用最大時間戳關(guān)聯(lián)原表
SELECT   t2.id,   t1.* FROM   (     SELECT       *     FROM       demo     ORDER BY       create_time DESC   ) AS t2 JOIN   (     SELECT       MAX(create_time) AS max_create_time,       user_id,       product_id     FROM       demo     GROUP BY       user_id,       product_id   ) AS t1   ON t1.user_id = t2.user_id   AND t1.product_id = t2.product_id   AND t1.max_create_time = t2.create_time

解釋

該解決方法通過兩次查詢實現(xiàn):

  • 第一個查詢計算每個分組的最新時間戳。
  • 第二個查詢使用該時間戳作為連接條件,從原表中找出每個分組的最新記錄。

這樣,我們可以獲得同一個用戶對同一個產(chǎn)品的最新記錄,排序結(jié)果也符合預(yù)期。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊0 分享