Comment sélectionner la première ligne de chaque groupe dans MySQL?

En C#, il serait comme ceci:

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

Linq-to-Sql traduit le code T-SQL suivant:

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]

Mais il est incompatible avec MySQL.

  • ne pouvez-vous pas surveiller le serveur de base de données pour voir ce que les requêtes de C# exécute (je suis certains-ce qui suppose que votre syntaxe ci-dessus est LINQ)
  • Oui, je peux, et je l'ai fait avec MS SQL Server. Mais je n'ai pas de Linq-to-MySQL, seulement Linq-to-Sql
InformationsquelleAutor Jader Dias | 2010-04-29