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

MySQL 5.7按Registry分组筛选最大IDMovement且IDCausal为21的行

解决方案:按Registry分组取最大IDMovement行并筛选IDCausal=21

针对你在MySQL 5.7中的需求,这里提供两种可行的查询方法,都能实现按Registry分组,只返回每组中IDMovement最大且IDCausal=21的行(无符合条件的组则不返回):

方法一:子查询获取每组最大IDMovement

先通过子查询算出每个Registry对应的最大IDMovement,再关联两张表筛选出目标记录:

SELECT
    m.IDMovement,
    mo.IDCausal,
    m.Registry
FROM
    registry m
JOIN movement mo ON m.IDMovement = mo.IDMovement
JOIN (
    SELECT Registry, MAX(IDMovement) AS max_id
    FROM registry
    GROUP BY Registry
) AS max_movement 
    ON m.Registry = max_movement.Registry 
    AND m.IDMovement = max_movement.max_id
WHERE mo.IDCausal = 21;

逻辑说明:

  1. 子查询max_movement按Registry分组,计算每组的最大IDMovement值
  2. 外层查询关联registry、movement和子查询结果,确保只拿到每组中IDMovement最大的那一行
  3. 最后通过WHERE mo.IDCausal = 21过滤,仅保留符合条件的记录

方法二:使用NOT EXISTS自关联判断最大行

通过自关联查询判断当前行是否为该Registry下IDMovement最大的行,再筛选IDCausal条件:

SELECT
    m.IDMovement,
    mo.IDCausal,
    m.Registry
FROM
    registry m
JOIN movement mo ON m.IDMovement = mo.IDMovement
WHERE NOT EXISTS (
    SELECT 1
    FROM registry m2
    WHERE m2.Registry = m.Registry 
      AND m2.IDMovement > m.IDMovement
)
AND mo.IDCausal = 21;

逻辑说明:

  1. NOT EXISTS子查询会检查:当前Registry下是否存在IDMovement比当前行更大的记录
  2. 如果不存在,说明当前行就是该Registry下IDMovement最大的行
  3. 同样通过AND mo.IDCausal = 21筛选出符合要求的结果

结合你的示例:当Registry=2SST0160的最大IDMovement行对应的IDCausal为5时,两种查询都不会返回该行;若IDCausal为21,则会返回这一行。

内容的提问来源于stack exchange,提问作者g-pane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:10:50