可能会遇到这么一种情况:1、获取各个分组的最新一条数据,2、根据各组最新一条数据关联查出其他数据
查询各组最新一条数据
- 查询各组最新一条数据,这个比较简单,但也不并不是
group by
加order by
,mysql的执行是先group by
分组了再order by
,这样其实分组时取的并不是各组的最新一条数据,是各组条件下的第一条数据,然后再给各组进行order by
排序,显然这不是我们的需求 - 方案:先写一个子查询,在子查询里进行排序,然后再
group by
,(注意子查询的order by
要与limit
结合使用)select flow_id from (select flow_id,evt_id from evaluate_t_dept_period_base where dept_s_time >= '2021-04-01 00:00:00' and dept_s_time <= '2021-04-30 23:59:59' order by flow_id desc limit 10000) f group by f.evt_id
根据各组最新数据做关联
- 如果按照上面的方法做关联,如果关联做的不好,可能会出现关联查询不到,mybatis会优化掉
order by
- 可以使用以上方法把需要的字段查询出来放在数组里,然后在做
where in
查询<choose> <when test="flowIdList != null and flowIdList.size() > 0"> LEFT JOIN (select * from evaluate_t_dept_period_base where flow_id in <foreach collection="flowIdList" item="flowId" open="(" close=")" separator=","> #{flowId} </foreach> ) b </when> <otherwise> LEFT JOIN evaluate_t_dept_period_base b </otherwise> </choose>