【发布时间】:2012-04-25 04:55:28
【问题描述】:
我有这张表 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",但这显然会根据两列返回不同的结果——这显然不是我想要的:)
【问题讨论】:
-
你为什么想要一个任意的 ID?
-
对不起,我不明白你的问题。 Ids 只是自动生成并为每个新行增加 1 - 我错过了什么吗?
-
我认为 LINQ 只是一个示例。但无论如何,
First不会返回最低、最旧、最新或最高的 ID,只是一个任意 ID。与 SQL 中的MAX或MIN相同。因此我问你为什么需要这个ID,因为它没有意义。 -
啊。当我试图写“如果项目按数据分组时,所有 Id 都是连续的”。我的意思是按数据分组将包含一个不与任何其他分组 Id 重叠的 Id 间隔。因此,来自所有组的任意 ID 将给出正确的顺序(编辑:组)。
-
标签: c# sql-server linq tsql