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

在 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
             );

https://stackoverflow.com/questions/2739474/

相关文章:

mysql - 如何在 Sequel Pro 中执行查询?

mysql - 总锁数超过锁表大小

mysql - MySQL中是否可以有基于函数的索引?

MySQL - 条件外键约束

mysql - 如何在 bash 上运行 MySQL 命令?

mysql - SQL 性能 UNION 与 OR

mysql - MySQL 是否索引 NULL 值?

mysql - 如何在 MySQL 中正确使用 CASE..WHEN

mysql - 从 cygwin 连接到 mysql

mysql - 遇到需要满足多个条件的 MySQL Join 问题