美文网首页
sql多分组取某字段最大或者最小的整列数据

sql多分组取某字段最大或者最小的整列数据

作者: 无实践无真知 | 来源:发表于2019-04-11 16:19 被阅读0次

写了这么长时间sql 也是第一次遇到所以做成笔记与大家一起分享

先整理一下需求:

1.部门按照要求将部门的所有费用进行统计 每种费用要填写额度(例如:公务:1000元,工资:6000等)填写具体数据之后提交一条记录做审核用,可以有多条审核通过,依照最新一条审核通过的费用详情做处理。

  1. 要求按照固定部门单个月(例如A部门6月份的数据)查找数据的时候 按照部门审核通过的时间最大
    3.可以按照部门类型查找(例如 部门a 部门b 同属于一种类型部门)那可以在查找时候将相同类型的费用数据合并
    4.可以按照年度查找(包括单个部门、同种类型部门 )全年的费用详情
首先说一下表结构
1554969220(1).jpg
这里主要用到的字段有 propose_time_year,approve_time, status,departmentId四个字段
 select
        baebda.cost_id cost_id,
        baebda.cost_set_name,
        baebda.cost_type,
        baebda.system_con_expenditure,
        sum(baebda.adjust_budget) adjust_budget
        from ( select
              asd.id ,asd.department_id
              from (select a.id,a.approve_time,a.department_id,a.adjust_month from budget_annual_expense_budget_adjust a
                inner join department so on a.department_id = so.id
                where a.`status` =3 //审核通过状态是3
                and a.propose_time_year = #{year} //年份是2019
                and a.adjust_month  < #{month}  //<为mybatis中的小于号
                <if test="orgType != null">
                    and so.org_type = #{orgType}
                </if>
               <if test="orgId != null">
                    and a.department_id = #{orgId}   //传类型 和部门 两个不能一起传(一起传可以没比要 部门id唯一)
                </if>
                ORDER BY a.approve_time desc   
                ) asd
                group by asd.department_id,asd.adjust_month
                ORDER BY asd.approve_time desc
              ) baeba
        inner join budget_annual_expense_budget_detail_adjust baebda on baeba.id = baebda.annual_expense_budget_adjust_id
        group by baebda.cost_id
总结 先按照approve_time 时间倒叙排序 然后分组 在倒排序 取得第一条记录为最新时间的记录 inner join 关联的表可以不用看 注意是全年的时候(或者是前6个月都可以 因为其中的小于号) 分组为按照月份和部门分组 这样取数据的时候是按照每个部门每个月份的最新审核通过的数据 (如果分组不加条件出现逻辑错误 就是这个部门所有时间段中最新一条审核通过的数据)
sql 语句的执行原理可以解释一般的筛选为什么是错误的 order by 如果放在group by 的后面 则按照正常的 先分组 后排序会打乱分组的数据 (所以把排序放在子查询里面 先排序 在外层分组这样取第一条数据的时候直接拿的最新一条记录)

相关文章

网友评论

      本文标题:sql多分组取某字段最大或者最小的整列数据

      本文链接:https://www.haomeiwen.com/subject/zhatwqtx.html