我有一张桌子:
Group | BasalArea | SpeciesName
1 | 3.6 | Palustris
1 | 45.0 | MSO
2 | 4.2 | Oak
2 | 2.0 | MSO
...
从这张表中,我想得到具有最高基础面积的物种名称,这些物种名称由“组”字段分组,如下所示:
Group | BasalArea | SpeciesName
1 | 45.0 | MSO
2 | 4.2 | Oak
使用SQL,我可以获得最高的基础区域:
SELECT Group, Max(BasalArea)
FROM TABLE
GROUP BY Group
我无法弄清楚如何在不做一些循环的情况下获得物种名称。这可能吗?处理关系的策略是什么?
答案 0 :(得分:4)
这在LINQ2SQL中比在SQL中更简单:
var res = source.MyTable
.GroupBy(item => item.Group)
.Select(g => g.OrderByDescending(item => item.BasalArea).First())
.ToList();
这将返回BasalArea
中Group
最大值SpeciesName
的项目列表以及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
。
在SQL中,您需要联接回原始表,如下所示:
{{1}}
答案 1 :(得分:2)
试试这个:
var froup = categories.GroupBy(g => new {g.CategoryType})
.Select(g => g.OrderByDescending(i => i.CategoryID).First())
.ToArray();
答案 2 :(得分: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