У меня есть эта таблица Test { Id:int, data:string }
- таблица с двумя столбцами и n строк.Создать строку SQL - возможно, с использованием DISTINCT, GROUP BY или ..?
Факты:
- 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);
}
}
Это будет печатать:
Как я пишу это в здравницы, в SQL (для MS SQL)? Я был вокруг различных решений, таких как "SELECT DISTINCT Data, Id FROM Test ORDER BY Id DESC"
, но это, по-видимому, кажется, что они отличаются от обоих столбцов, что явно не то, что я хочу :)
Почему вы хотите произвольный идентификатор вообще? –
Жаль, что я не понимаю ваш вопрос. Идентификаторы просто автогенерируются и увеличиваются на 1 для каждой новой строки - я что-то упускаю? – Moberg
Я думал, что LINQ будет просто образцом. Но в любом случае «First» не будет возвращать самый низкий, самый старый, новейший или самый высокий ID, просто произвольный идентификатор. То же, что и 'MAX' или' MIN' в SQL. Поэтому я спросил, почему вам нужен этот идентификатор, поскольку он не имеет никакого значения. –