2

私はこのテーブルを持っていますTest { Id:int, data:string }- 2列と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"、これは明らかに両方の列に基づいて異なるものを返します-これは明らかに私が望むものではありません:)

4

2 に答える 2

4

これを試すことができますか?

SELECT Data, MAX(Id)
FROM Test 
GROUP BY Data
ORDER BY MAX(Id) DESC

アップデート:

Id は集計関数を使用する必要があり、作成者の要件とは無関係であるため、MAX 関数を使用しましたが、他の関数を使用できると思います。

于 2012-04-12T19:34:17.230 に答える
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

私はこれを試してみます

于 2012-04-12T19:47:54.160 に答える