【问题标题】:Get the first row of each group by [duplicate]通过[重复]获取每组的第一行
【发布时间】:2022-11-29 02:32:00
【问题描述】:

我创建了一个包含类别 ID 和名称的表,该表包含多个匹配的类别 ID,因此我想获取每个匹配类别 ID 的第一个数据

根据上面的示例表,我只想得到名称 alex 和 brown

这是我试过的

SELECT * FROM tailors
                            WHERE id IN(
                                    SELECT min(id)
                                    FROM tailors
                                    GROUP BY cat_id,id,name,status
                            )

但是当我只是想获取每个匹配类别 ID 的第一个数据时,我得到了所有记录

【问题讨论】:

    标签: mysql sql greatest-n-per-group


    【解决方案1】:

    您只需要从 group by 子句中取出 id 和 name -

    SELECT * FROM tailors
     WHERE id IN (SELECT min(id)
                    FROM tailors
                   GROUP BY cat_id, status
                 );
    

    【讨论】:

    • 谢谢,我真的没看到
    【解决方案2】:

    如果整个表的逻辑保持不变,并且数据库的版本为 8.0+,则使用这样的聚合:

    SELECT name
      FROM( SELECT t.*, MIN(id) OVER (PARTITION BY cat_id) AS min
              FROM tailors AS t ) AS tt
     WHERE id = min
    

    假设 id 是一个主键列,每个 cat_id 将只有一个最小值。

    GROUP BY cat_idPARTITION BY cat_id 处理,它后面的其他列(namestatus)应该被删除。

    【讨论】:

      【解决方案3】:

      要仅返回一行,请使用 LIMIT 1

      SELECT * FROM tailors
             WHERE id IN(
              SELECT min(id)
              FROM tailors
              GROUP BY cat_id,id,name,status
            ) LIMIT 1
      

      【讨论】:

      • 如果我使用 limit 1 我只得到第一个数据
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多