繁体   English   中英

SQL查询:仅显示每个集合中的最新ID

[英]SQL Query: Display only latest Id from each set

我有以下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

由于ID 2和7是表中UserSet1和UserSet2的最新条目,因此我想显示该条目而不是表中的所有条目。

任何输入如何获得所需的结果。

我愿意接受直接返回输出或任何linq(C#)解决方案的解决方案。 即返回整个数据集,然后使用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()窗口函数。

感谢大家指出正确的方向。 我已经使用下面的Linq和C#代码进行了此工作:

 var results = response.GroupBy(row => row.Name)
                   .SelectMany(g => g.OrderByDescending(row => row.Id).Take(1));

对于最初的测试,这似乎是可行的。 让我知道您是否认为这已经成为问题。

这应该是一般的SQL答案:

SELECT * FROM yourtable Y1
WHERE Id = (SELECT MAX(Id)
              FROM yourtable Y2
             WHERE Y2.Name = Y1.Name)

如果是MS SQL,则可以使用Partition By命令,否则,最有效的方式是:

select * from Table
where Id in (
    select Max(Id) from Table
    Group By Name
)

不知道是否可以将Name保留在Select语句之外,您可能需要执行以下操作:

select * from Table
where Id in (
    Select Id from 
        (select Name, Max(Id) as Id from Table
        Group By Name)
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM