Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL查询:仅显示每个集合中最新的Id_C#_Sql_Linq_Amazon Dynamodb - Fatal编程技术网

C# SQL查询:仅显示每个集合中最新的Id

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

我有以下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  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的任何输入?