我有这个表Test { Id:int, data:string }
- 一个有两列和 n 行的表。
事实:
- Id 是唯一的(并说明添加项目的顺序)
- 数据可以有重复
- 如果项目按数据分组,则所有 Id 都是连续的
在 LINQ 中,我会做类似的事情:
class Row
{
public int Id { get; set; }
public string Data { get; set; }
}
public static class MyTestClass
{
public static void Test()
{
IEnumerable<Row> rows = new List<Row>
{
new Row { Id = 1, Data = "42"},
new Row { Id = 2, Data = "42"},
new Row { Id = 3, Data = "11"},
new Row { Id = 4, Data = "11"},
new Row { Id = 5, Data = "11"},
new Row { Id = 6, Data = "65"},
};
var result = rows.GroupBy(r => r.Data)
.OrderByDescending(g => g.First().Id)
.Select(g => g.Key)
.ToList();
var str = string.Join(" ", result);
Console.WriteLine(str);
}
}
这将打印:
65
11
42
如何在 SQL 中以有效的方式编写此代码(对于 MS SQL)?我一直在使用不同的解决方案,"SELECT DISTINCT Data, Id FROM Test ORDER BY Id DESC"
但显然这会根据两列返回不同的结果——这显然不是我想要的:)