c# - 创建 SQL 字符串 - 可能涉及 DISTINCT、GROUP BY 或 ..?

标签 c# sql-server linq t-sql

我有这个表 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/

相关文章:

c# - 如何从 XElement 检索元素

xna - 我随机做错了什么?

sql-server - 服务代理 - 跨数据库选择插入本地数据库?

c# - 使用 LINQ 替换循环是否明智?

sql-server - 根据开始日期和结束日期创建唯一约束

sql-server - 如何在 POWER BI 中减去不同行上的日期

c# - 从列表中获取不同计数

c# - 反转整数值列表

c# - 调整 Infragistics UltraGrid 的大小以完美适应其内容

c# - 如何按名称查找 bindingSource?