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.利用內連接,比較待排序列,統計比較結果
...