使用group by分组之后子查询的order by排序失效的问题

来源:互联网 发布:文案好的淘宝店 编辑:程序博客网 时间:2024/05/02 04:15

需求:

1.首页的查询需要按照lrsj进行排序

2.每一条数据通过fchrq,chxh进行分组

原始的sql

SELECT  fchrq,chxh FROM(SELECT top 100 percent chxh,fchrq,lrsj FROM HCZZQD_source where chxh  is not null <include refid="resultWhereSqlv2" /> ORDER BY lrsj desc) TGROUP BY fchrq,chxh

按照正常逻辑貌似没错,子查询中是按照录入时间进行了排序,查询是使用group by进行了分组;

在使用分页插件后,应该是可以获取到数据的;

实际上确实获取到了数据,但是order by lrsj并没有生效,取出来的数据只是group by进行了分组;


方案一:<mission false>

top 100 percent 是取查询出来的所有数据,网上的偏方: top 100 percent 改为 top 99.999 percent 原理我并没有理解,但是对我的sql并没有生效,我不知道这个改动的适用范围

方案二:<mission success>

实际上很简单的sql,sql会对数据先进行分组在进行排序,而我上述写法是先排序再分组,之所以还这样写是因为分组的时候fchrq ,chxh 里面不包含lrsj.

所以我走进了误区:我的子查询好像只能获取字段fchrq,chxh.并不能获取lrsj, 然而事实上并不是

百度失败后,盯着sql突然想到了,按照group by进行分组确实不能直接获取到lrsj,因为是两个lrsj,可是我可以获取第一排数据的lrsj也就是max(lrsj);

于是改动成功:

          SELECT fchrq,chxh FROM HCZZQD_source where chxh  is not null <include refid="resultWhereSqlv2" /> group BY fchrq,chxh ORDER by max(lrsj) desc

不需要子查询,直需要查询这个表一次即可;

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 统计专业知识和实务 二建建筑工程管理与实务 二建机电工程管理与实务 2019年一级建造师市政实务真题 2019年一级建造师建筑实务真题 2019年一级建造师水利实务真题 2014年一级建造师建筑实务真题 形参与实参 形参和实参的区别 实妹 实妹宝典 实妹相伴的大泉君 实妹相伴下的大泉君 实训总结通用版3000字 实训总结3000字 春什么秋实四字成语 金工实训总结500字 实字拼音 什么华什么实四字成语 实训总结通用版800字 实训总结2000字 实训小结200字 个人实训总结300字 钳工实训总结600字 大学生实训总结2000字 工地实训总结3000字 实训周记通用300字 钳工实训总结1000字 沙盘实训个人总结800字 实训总结1000字 实字开头的成语 有什么实四字词语 工程测量实训总结3000字 大一电焊实训总结1500字 测量实训报告3000字 大一erp实训报告心得体会1500字 实训总结与体会1000字 电气控制实训心得体会800字 测量实训心得体会1000字 实训总结通用版300字 金工实训总结2000字