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 @   黑狗已醒  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 解决跨域问题的这6种方案,真香!
· 分享4款.NET开源、免费、实用的商城系统
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
点击右上角即可分享
微信分享提示