mysql - 如何为 MySQL 中的每个组选择第一行?

标签 mysql group-by grouping

在 C# 中是这样的:

table
   .GroupBy(row => row.SomeColumn)
   .Select(group => group
       .OrderBy(row => row.AnotherColumn)
       .First()
   )

Linq-To-Sql 将其转换为以下 T-SQL 代码:

SELECT [t3].[AnotherColumn], [t3].[SomeColumn]
FROM (
    SELECT [t0].[SomeColumn]
    FROM [Table] AS [t0]
    GROUP BY [t0].[SomeColumn]
    ) AS [t1]
OUTER APPLY (
    SELECT TOP (1) [t2].[AnotherColumn], [t2].[SomeColumn]
    FROM [Table] AS [t2]
    WHERE (([t1].[SomeColumn] IS NULL) AND ([t2].[SomeColumn] IS NULL))
      OR (([t1].[SomeColumn] IS NOT NULL) AND ([t2].[SomeColumn] IS NOT NULL)
        AND ([t1].[SomeColumn] = [t2].[SomeColumn]))
    ORDER BY [t2].[AnotherColumn]
    ) AS [t3]
ORDER BY [t3].[AnotherColumn]

但它与 MySQL 不兼容。

最佳答案

我的回答仅基于您帖子的标题,因为我不懂 C#,也不理解给定的查询。但在 MySQL 中,我建议您尝试子选择。首先获取一组感兴趣列的主键,然后从这些行中选择数据:

SELECT somecolumn, anothercolumn 
  FROM sometable 
 WHERE id IN (
               SELECT min(id) 
                 FROM sometable 
                GROUP BY somecolumn
             );

关于mysql - 如何为 MySQL 中的每个组选择第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2739474/

相关文章:

mysql - 这些 sql 连接之间的差异(相同的结果,相同的执行计划)

php - 创建一个带有评级系统的(简单)Flash 游戏网站

基于 Java 的独立应用程序

python - 更有效/干净的方式来聚合数据

带投影的 Linq groupby 查询

php - mysql 匹配查询

MySQL Left Join + Min

mysql - 在一个 GROUP BY 中组合多行

matlab - 按 2 个变量分组,一个变量具有独特的颜色,另一个变量具有独特的形状

MySQL 对不同的行进行分组以创建组和简单产品