mysql 是否可以进一步过滤MAX结果?

u3r8eeie  于 2022-11-28  发布在  Mysql
关注(0)|答案(1)|浏览(233)

我有一张这样的table
A)

正如您所看到的,同一个ID可以有多个Revision ID
现在,我可以通过使用MAXGROUP BY获取每个ID的所有最新修订版,如下所示:

  1. SELECT *, MAX(revision_id)
  2. FROM content_moderation_state_field_revision
  3. GROUP BY id DESC;

B)

如此处所示,修订ID 47141是ID 3282的最新修订版本
“我的目标是"
我想做的是进一步过滤这些(屏幕截图B)结果,仅过滤最新/最高版本的published仲裁状态。
不过,如果我试

  1. SELECT *, MAX(revision_id)
  2. FROM content_moderation_state_field_revision
  3. WHERE moderation_state = 'published'
  4. GROUP BY id DESC;

我得到
C)

这不是我想要的,因为它不再获取每个ID的最新/最高修订版。47139不是3282的最高/最新修订版,而是47141,如屏幕截图B所示。
我在这里只想显示3278行,因为这是唯一一行,它也具有最新/最高修订版本,并具有已发布的审核状态(请参见屏幕截图B)
"在一个疯子"
我只想选择“已发布”且具有最大revision_id的行
我怎样才能实现我的目标?这可能吗?

nfs0ujit

nfs0ujit1#

可以将条件逻辑与HAVING子句沿着使用,例如

  1. SELECT id,
  2. MAX(revision_id) AS revision_id,
  3. MAX(moderation_state) AS moderation_state
  4. FROM content_moderation_state_field_revision
  5. GROUP BY id
  6. HAVING MAX(CASE WHEN moderation_state = 'published' THEN revision_id END) =
  7. MAX(revision_id);

相关问题