You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取指定ASMS编号下最高ID最新记录的SQL与前后端实现问题

解决方案:获取指定ASMS编号的最新记录(ID最大)

后端Java(Spring Data JPA)方案

方法1:优化派生查询(Derived Query)

之前的findFirst1ByAsmsNumber未指定排序规则,只会返回数据库中匹配的第一条记录,而非ID最大的最新记录。只需在方法名中补充排序逻辑即可:

  1. 在PriorityProgressRepository接口中定义正确的查询方法:
// 按ID降序排序,取第一条匹配ASMS编号的记录
Optional<PriorityProgressEntity> findFirstByAsmsNumberOrderByIdDesc(String asmsNumber);
  1. 修改Controller方法,调整返回类型为单个Optional(无需返回列表):
//RETURN ONLY THE LATEST RECORD
//https://besterdev-api.apps.pcfepg3mi.gm.com/api/v1/pprecords/latest/{asmsnumber}
@RequestMapping("/pprecords/latest/{asmsNumber}")
public Optional<PriorityProgressEntity> getLatestRecord(@PathVariable(value = "asmsNumber") String asmsNumber) {
    return priorityprogressrepo.findFirstByAsmsNumberOrderByIdDesc(asmsNumber);
}

方法2:自定义JPQL查询

如果派生查询不够灵活,可直接编写JPQL语句控制逻辑:

// 在PriorityProgressRepository接口中添加
@Query("SELECT p FROM PriorityProgressEntity p WHERE p.asmsNumber = :asmsNumber ORDER BY p.id DESC LIMIT 1")
Optional<PriorityProgressEntity> findLatestByAsmsNumber(@Param("asmsNumber") String asmsNumber);

之后Controller调用该方法即可,返回类型同样调整为Optional<PriorityProgressEntity>。

前端React(Axios)方案

若暂时无法修改后端,可在前端拿到所有匹配记录后,筛选出ID最大的对象:

axios.get(`/api/v1/pprecords/latest/${asmsNumber}`)
  .then(response => {
    const records = response.data;
    if (!records || records.length === 0) {
      // 处理无数据的情况
      return;
    }
    // 遍历数组,找到ID最大的记录
    const latestRecord = records.reduce((prev, current) => {
      return prev.id > current.id ? prev : current;
    });
    // 使用latestRecord渲染UI
    console.log('最新记录:', latestRecord);
  })
  .catch(error => {
    console.error('获取数据失败:', error);
  });

内容的提问来源于stack exchange,提问作者Bester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:06:45