从一个表中获取同字段type的最新一条数据,然后将获取的数据进行分页展示
同一个单据中会有多个批次,在推送记录中展示出所有推送批次中最新的一条,如果推送失败,则展示推送的异常原因与推送
按钮,推送成功则表示终态,不可在操作。
设计的过程中,需要将历史的推送记录都有留痕,而不是每次推送直接覆盖
使用 Mybatis Plus
进行开发,为了查询效率,具体实现逻辑为
relationId
与 type
创建聚合索引where relationId = ? and type = ?
group by push_order_type ,push_batch_no
进行分组以上子查询中的查询效率会直接命中索引,也就是达到 覆盖索引
覆盖索引
如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们称之为覆盖索引
, 如果索引的叶子节点中已经包含要查询的数据,那么没什么必要再回表查询了
java// 构建参数
LambdaQueryWrapper<TableEntity> lambdaQueryWrapper = Wrappers.lambdaQuery(TableEntity.class)
.last("id in (select max(id) from table_name where relation_id = " + req.getRelationId() + " and type = " + req.getType() + " group by push_order_type ,push_batch_no)")
.orderByDesc(TableEntity::getId);
以上解析的sql语句为
sqlSELECT
*
FROM
table_name
WHERE id in (
select max(id) from table_name where relation_id = 42 and type = 1 group by push_order_type, push_batch_no
)
ORDER BY id DESC;
工作过程中,经常会遇到一些特殊场景,其中涉及一些复杂且通用的代码逻辑,在此进行记录,下次有此需求时直接套用即可。
本文作者:柳始恭
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!