当前位置:  开发笔记 > 数据库 > 正文

获取表中的最后一项 - SQL

如何解决《获取表中的最后一项-SQL》经验,为你挑选了2个好方法。

我在SQL Server中有一个历史表,它基本上通过一个进程跟踪一个项目.该项目具有一些固定的字段,这些字段在整个过程中不会发生变化,但还有一些其他字段,包括状态和Id,随着过程步骤的增加而增加.

基本上我想在给定批量参考的情况下检索每个项目的最后一步.所以,如果我做了

Select * from HistoryTable where BatchRef = @BatchRef

它将返回批次中所有项目的所有步骤 - 例如

Id      Status  BatchRef        ItemCount
1       1       Batch001        100
1       2       Batch001        110
2       1       Batch001        60
2       2       Batch001        100

但我真正想要的是:

Id      Status  BatchRef        ItemCount
1       2       Batch001        110
2       2       Batch001        100

编辑:Appologies - 似乎无法让TABLE标签与Markdown一起使用 - 按照字母的帮助,在预览中看起来很好



1> ZombieSheep..:

假设表中有一个标识列...

select 
    top 1  
from 
    HistoryTable 
where 
    BatchRef = @BatchRef 
order by 
     DESC



2> Mark Bracket..:

很难理解你的桌子设计 - 我觉得吃掉你的分隔符.

处理此问题的基本方法是对您的固定字段进行GROUP BY,并为某些unqiue值选择MAX(或MIN)(日期时间通常很有效).在您的情况下,我认为 GROUP BY将是BatchRef和ItemCount,而Id将是您的唯一列.

然后,返回到表以获取所有列.就像是:

SELECT * 
FROM HistoryTable
JOIN (
   SELECT 
       MAX(Id) as Id.
       BatchRef,
       ItemCount
   FROM HsitoryTable
   WHERE
       BacthRef = @batchRef
   GROUP BY
       BatchRef,
       ItemCount
 ) as Latest ON
   HistoryTable.Id = Latest.Id

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有