我有这个表 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"
但这显然会根据两列返回不同的结果 - 这显然不是我想要的:)
最佳答案
你能试试这个吗?
SELECT Data, MAX(Id)
FROM Test
GROUP BY Data
ORDER BY MAX(Id) DESC
更新:
由于Id应该是聚合函数,与作者的要求无关,所以我使用了MAX函数,我想可以使用任何其他函数。
关于c# - 创建 SQL 字符串 - 可能涉及 DISTINCT、GROUP BY 或 ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10130455/