C# SQL查询:仅显示每个集合中最新的Id
我有以下SQL表:C# SQL查询:仅显示每个集合中最新的Id,c#,sql,linq,amazon-dynamodb,C#,Sql,Linq,Amazon Dynamodb,我有以下SQL表: Name Description Id UserId CreatedDate UserSet1 Desc1 1 Abc 06/01/2018 UserSet1 Desc2 2 Def 06/02/2018 UserSet2 Desc for 2 5 NewUser 06/04/2018 UserSet2 Desc for 2 7 NewUser
Name Description Id UserId CreatedDate
UserSet1 Desc1 1 Abc 06/01/2018
UserSet1 Desc2 2 Def 06/02/2018
UserSet2 Desc for 2 5 NewUser 06/04/2018
UserSet2 Desc for 2 7 NewUser 06/19/2018
我想从上表中提取的只是每个名称的最新Id,以便获得以下输出
Name Description Id UserId CreatedDate
UserSet1 Desc2 2 Def 06/01/2018
UserSet2 Desc for 2 7 NewUser 06/19/2018
由于ID2和ID7是表中UserSet1和UserSet2的最新条目,因此我想显示它,而不是表中的所有条目
任何输入如何才能得到期望的结果
我欢迎直接返回输出的解决方案或任何linq C解决方案。Ie返回整个数据集,然后使用linq过滤上述内容。编辑:由于您正在查找最高的数字ID,GROUP BY方法可能更容易使用 使用窗口功能:
SELECT *
FROM (
SELECT Name, Description, Id, UserId, CreatedDate
, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY CreatedDate DESC) AS rn
FROM myTable
) s1
WHERE rn = 1
我没有dynamoDB的实例可以测试,但我相信它可以使用ROW_NUMBER窗口函数 这应该是一个一般的SQL答案:
SELECT * FROM yourtable Y1
WHERE Id = (SELECT MAX(Id)
FROM yourtable Y2
WHERE Y2.Name = Y1.Name)
如果是MS SQL,您可以通过命令使用分区,否则最有效的方法是:
select * from Table
where Id in (
select Max(Id) from Table
Group By Name
)
不确定是否可以在Select语句中保留名称,可能需要执行以下操作:
select * from Table
where Id in (
Select Id from
(select Name, Max(Id) as Id from Table
Group By Name)
)
感谢大家指出了正确的方向。我使用以下Linq和C代码实现了此功能:
var results = response.GroupBy(row => row.Name)
.SelectMany(g => g.OrderByDescending(row => row.Id).Take(1));
对于初始测试,这似乎是可行的。如果您认为出现了问题,请告诉我。您可以使用窗口函数。如果您可以访问SQL,您可以按名称分组并选择TOP 1 ID什么版本和风格的SQL?我实际上使用的是AWS的Dynamo DB。很抱歉,因为这是我第一次使用dynamo db。现在我认为它是一个没有sql的数据库,这只有在我们从DB获得全部结果后才可能过滤掉代码中的结果。DynamoDB允许您选择GROUP BY中不包括的列吗?RE:MS SQL Performance>>我认为对于in子句和PARTITION BY子句,优化器的性能不会更好。在1,2,3,。。。本质上是其中Id=1或Id=2或Id=3或….的缩写。。。。对于大型子查询,它可能是一个非常复杂的语句。分区依据仍然是基于设置的。@user007,您知道如何使用LINQ for编写分区依据吗C@Shawn关于性能,我考虑的是相关子查询,因为我可以看到一些人有他们的解决方案。您可能还想在数据库中创建一个视图,而只是查询该视图。这样,您就不会试图在Linq中构建所需的结果。这里的一件事是,我想在此基础上添加另一个条件。除了上面获得的结果集,我还希望结果显示ID为0的所有ID。因此,我的结果集将包含ID 2、7和0。如何修改上述Linq的任何输入?