2

私はテーブルを持っています:

Group | BasalArea | SpeciesName
1     | 3.6       | Palustris
1     | 45.0      | MSO
2     | 4.2       | Oak
2     | 2.0       | MSO
...

このテーブルから、Group フィールドでグループ化された基底面積が最大の種名を取得したいと思います。これは次のようになります。

Group | BasalArea | SpeciesName
1     | 45.0      | MSO
2     | 4.2       | Oak

SQL を使用して、最高の基底面積を取得できます。

SELECT Group, Max(BasalArea)
FROM TABLE
GROUP BY Group

ループを行わずに種名を取得する方法もわかりません。これは可能ですか?同点を処理するための戦略は何ですか?

4

3 に答える 3

4

これは、SQL よりも LINQ2SQL の方が簡単です。

var res = source.MyTable
    .GroupBy(item => item.Group)
    .Select(g => g.OrderByDescending(item => item.BasalArea).First())
    .ToList();

BasalAreaこれは、内で の最大値を持つアイテムのリストを とともに返しGroupますSpeciesName

SQL では、次のように元のテーブルに結合する必要があります。

SELECT * FROM TABLE b
JOIN (
    SELECT Group, Max(BasalArea) as BasalArea
    FROM TABLE
    GROUP BY Group
) t on t.Group = b.Group AND t.BasalArea = b.BasalArea
于 2012-11-30T19:07:04.413 に答える
2

これを試して:

var froup = categories.GroupBy(g => new {g.CategoryType})
                          .Select(g => g.OrderByDescending(i => i.CategoryID).First())
                          .ToArray();
于 2012-11-30T19:14:51.283 に答える
1

sasblinkenlight が言ったのは LINQ です。好奇心から、ここに潜在的な SQL ソリューションがあります。

SELECT grouped.Group, raw.SpeciesName, grouped.MaBasalArea
FROM (
        SELECT Group, MAX(BasalArea) as MaxBasalArea
        FROM TABLE
        GROUP BY Group
     ) grouped
INNER JOIN TABLE raw ON grouped.MaxBasalArea = raw.BasalArea AND grouped.Group = raw.Group
于 2012-11-30T19:14:16.463 に答える