我有这个表Test { Id:int, data:string }
- 一个包含两列和n行的表。
事实:
在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"
这样的不同解决方案有关,但显然这会基于两列返回明显 - 这显然不是我想要的:)
答案 0 :(得分:4)
你能试试吗?
SELECT Data, MAX(Id)
FROM Test
GROUP BY Data
ORDER BY MAX(Id) DESC
<强>更新强>
由于Id应该是一个聚合函数,并且它与作者的要求无关,因此我使用了MAX函数,我猜是可以使用任何其他函数。
答案 1 :(得分:0)
SELECT DISTINCT Test.Data
FROM (SELECT Data
FROM Test
GROUP BY Data) as Grouping
INNER JOIN Test on Test.Data = Grouping.Data
ORDER BY Test.Id DESC
我会尝试这个