【问题标题】:Grouping in Max query最大查询中的分组
【发布时间】:2015-07-26 17:42:41
【问题描述】:

我有以下查询,除了它没有按我希望的那样分组之外,它工作正常:

SELECT
  oee_main_interim.id,
  oee_main_interim.NAME,
  oee_main_interim.S_TYPE
FROM
  oee_main_interim  
WHERE
  oee_main_interim.S_TYPE <>0   
GROUP BY
    oee_main_interim.id, oee_main_interim.NAME
HAVING
    oee_main_interim.id= max(oee_main_interim.id)

所有 3 个字段都是 INT 类型。该查询通过不按名称分组来返回 id 的最大值,而是列出多个名称。我想要的很简单:Max ID,对应的NAME和对应的S_TYPE。所以我的输出应该是这样的:

ID    NAME       S_TYPE
1234   1           2
1345   2           1
1456   3           2
1567   4           2

ID 是每个 NAME 的表的最大 id ...

我在表oee_main_interim中的原始数据如下:

所以我想要的只是为每个 NAME 选择最大 ID 并显示其相关的 S_TYPE(如上所示)以及 S_TYPE 0 的位置。

我的所有列的完整表格如下:

【问题讨论】:

    标签: mysql group-by max


    【解决方案1】:

    此查询使用派生表,将为您提供每个名称的最大 id 及其 s_type:

    Select
      oee_main_interim.id,
      oee_main_interim.NAME,
      oee_main_interim.S_TYPE
    From
      oee_main_interim  
    Join
      (
      select max(id) max_id, name from oee_main_interim group by name
      ) a on a.name = oee_main_interim.name and a.max_id = oee_main_interim.id
    Where
      oee_main_interim.S_TYPE <> 0   
    

    或者您可以使用相关子查询:

    Select 
      id, NAME, S_TYPE 
    From 
      oee_main_interim o1
    Where 
      S_TYPE <> 0 
    And id = (select max(id) from oee_main_interim o2 where o1.name = o2.name);
    

    【讨论】:

    • 抱歉,这两个查询都没有返回任何记录
    • @elstiv 真的吗?这很令人惊讶。您能否编辑您的问题并添加一些示例源数据?我看不出他们不返回任何数据的任何原因。
    • @elstiv 看这个例子:sqlfiddle.com/#!9/1b6814/1 它根据您的示例数据返回三行 - 您的数据库或您执行的查询有什么不同吗?
    • 我不知道怎么了。我再次编辑了主要问题以包含表中的所有其他列,也许问题与我未包含在查询中的其他列有关...
    • @elstiv 很抱歉,我也看不到这个问题。查询应该可以与其他列一起正常工作,因为它们不用于选择要返回的行。
    猜你喜欢
    • 2015-02-24
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多