mysql子查詢排序失效的解決方案
數(shù)據(jù)庫中存儲著大量用戶數(shù)據(jù),有時我們需要從這些數(shù)據(jù)中找出同一個用戶對同一個產(chǎn)品的最新記錄。然而,當(dāng)我們直接對子查詢進行排序時,排序結(jié)果可能不符合預(yù)期。
問題原因
在mysql中,子查詢中的排序不會保留到外部查詢中。因此,當(dāng)我們對一個包含排序子查詢的外部查詢進行分組時,排序?qū)⑹А?/p>
解決方法
為了解決這個問題,我們可以使用一種雙重查詢的方法:
- 計算每個分組的最大時間戳
select max(create_time) as max_create_time, user_id, product_id from demo group by user_id, product_id
- 使用最大時間戳關(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)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END