mysql 組內排序(分組之前排序,如分組取最新時間的數據)


Oracle、SQL server數據庫的分組排序函數rank()over()、row_number()over()、dense_rank()over()

MySQL沒有這三個函數。

sql執行順序圖

1.利用group_concat()函數內置的order by分組排序屬性

group_concat()函數完整語法

group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段[Separator '分隔符'])

-- GROUP_CONCAT 默認長度限制是1024 默認分隔符','
-- group_column  分組字段
-- required_out_group_column 需要排序的非分組字段。如按大樓樓層分組,每個樓層最晚到班的人的姓名或者到班時間
-- 分組排序查詢某個字段
SELECT group_column, 
SUBSTRING_INDEX(GROUP_CONCAT(required_out_group_column ORDER BY order_time DESC SEPARATOR ','), ',', 1) AS require_column1
FROM table_name  GROUP BY group_column

-- 分組排序查詢所有字段
SELECT t1.*, t2.stu_name FROM test t1 RIGHT JOIN 
(SELECT stu_name, GROUP_CONCAT(id ORDER BY RECORD_TIME DESC) order_id FROM test GROUP BY stu_name)  t2 
ON t1.stu_name = t2.stu_name AND 
FIND_IN_SET(t1.id, t2.order_id) = 1
-- <=>
-- t1.id = SUBSTRING_INDEX(t2.order_id,',',1) 

2.

SELECT * FROM 

(SELECT t1.*, t2.product_id pid FROM 
 tb_group_order t1
 LEFT JOIN tb_group_order t2 ON t1.id = t2.id
-- **    
 HAVING 1
 ORDER BY t2.record_time DESC)  t GROUP BY t.pid

 

Mysql 取分組后時間最大的一整條數據 及一些分組后取出每天最大時間一條

 

3. 利用變量賦值

...

https://blog.51cto.com/mrcelite/745913

4.利用內連接,比較待排序列,統計比較結果

...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM