mysql 5.7 及以下版本 分组(GROUP BY)和排序(ORDER BY)共同使用

《1》select * FROM gs_day_trade_list a WHERE 

deal_time IN ( SELECT MAX( deal_time ) FROM gs_day_trade_list where data_date='2025-01-03' and trade_date='2025-01-03' GROUP BY data_period )

 

ORDER BY data_period asc,deal_time desc

 

1.思路先分组后面排序,以上 sql  实现  按照 时段分组 后,取 成交时间最新的一条数据, 如果  时间最新早的一条, max 改成 min 就可以了

 

--以上有bug  时间有相同的就出来多余数据

 

《2》select * FROM gs_day_trade_list a WHERE 

deal_time = ( SELECT MAX( b.deal_time ) FROM gs_day_trade_list  b where a.data_date=b.data_date and a.trade_date=b.trade_date GROUP BY b.data_period )

 where a.data_date='2025-01-03' and b.trade_date='2025-01-03'

ORDER BY a.data_period asc,a.deal_time desc

 

 

《3》

select GROUP_CONCAT(menu_id) from rh_menu;      --所有行的字段用逗号拼接成一列

select CONCAT(menu_id,parent_id) from rh_menu              --- 两个字段拼接

select CONCAT_WS(',',menu_id,parent_id) from rh_menu           --- 两个字段用逗号拼接

select * from rh_menu a where FIND_IN_SET(a.parent_id,'0')=1 and a.sys_code='11'  --- 查询 parent_id等于0的数据,FIND_IN_SET 可以放 函数,字段  ,和 in 和like  类似

select * from rh_menu a where FIND_IN_SET(a.parent_id,get_child_list('0'))=1 and a.sys_code='11'  --- 查询 parent_id等于0的数据,FIND_IN_SET 可以放 函数,字段  ,和 in 和like  类似

 

 

《4》mysql 自定义 函数

delimiter $$
drop function if exists get_child_list$$
create function get_child_list(in_id varchar(10)) returns varchar(1000)
begin
declare ids varchar(1000) default '';
declare tempids varchar(1000);

set tempids = in_id;
while tempids is not null do
set ids = CONCAT_WS(',',ids,tempids);
select GROUP_CONCAT(id) into tempids from dept where FIND_IN_SET(pid,tempids)>0;
end while;
return ids;
end
$$
delimiter ;

 

 

参考 

https://www.cnblogs.com/guohu/p/14990788.html

 

 

 

posted @ 2025-01-03 10:05  黑狗已醒  阅读(94)  评论(0)    收藏  举报