获取sql中的最新行(从重复中获取一行)

时间:2015-06-26 02:53:20

标签: sql sql-server sql-server-2008

我有一个数据库,其中我存储数据,一旦更新,将保存更新的数据..(除状态和批准者外,具有相同的行数据) 为了更好地理解,这是我的表

    | RequestID   |  RequestDate  |  PartNumber  | StatusID |  FullName  |
    | 171367      |  2015-05-11   | PTA#522589   |   4      | Jfuentes   |
    | 171367      |  2015-05-11   | PTA#522589   |   5      | JReyes     |
    | 171367      |  2015-05-11   | PTA#522589   |   6      | JLabo      |
    | 171367      |  2015-05-11   | PTA#522589   |   7      | JGulbin    |
    | 171367      |  2015-05-11   | PTA#522589   |   8      | Egulbin    |

因此,每次请求被批准时,都会添加另一行。

但是,我想只获得中的一个,其中包含RequestID的最新状态。

我尝试使用Distinct,但有些列我无法包含并收到此错误:

  

无法将text,ntext或image数据类型选为DISTINCT。

有没有其他方法可以获得我想要的行中的所有列?

这是我的疑问:

SELECT r.[RequestID],r.[RequestDate],r.[PARNumber],r.[StatusID],p.[DeliveryDate] 
, r.[PurchaseComment],r.[UID],p.[DeliveryDate],r.[FullName],r.[Email]          
,r.[EntityName],r.[DepartmentName],r.[DepartmentID],r.[InboxUID]
,r.[ProgramID],r.[ProgramCode],r.[ProgramName],r.[CostCenterCode]           
,p.[PartDesc],p.[SupplierID],p.[AccountType],p.[CurrName]
,p.[PartQuantity],p.[PiecePrice], p.[PartNumber], p.[DeliveryDate], p.[UnitName] 
FROM [NOP_PR].[dbo].[Requests] r 
JOIN [NOP_PR].[dbo].[Parts] p on p.[RequestID] = r.[RequestID]
JOIN [NOP_PR].[dbo].[REQApproval] a on a.[RequestID] = r.[RequestID] 
JOIN [NOP_PR].[dbo].[Departments] d on d.[DepartmentID] = r.[DepartmentID]
WHERE  [EntityName]  like '%.PTA'

有没有其他方法可以获得我想要的行中的所有列? 我所需要的只是查询所有请求而不在我的网站上复制它..

任何帮助都可以。

1 个答案:

答案 0 :(得分:1)

假设“最新”状态表示最新状态,则可以使用row_number()

select t.*
from (select t.*, row_number() over (partition by requestid
                                     order by requestdate desc, statusid desc) as seqnum
      from mytable t
     ) t
where seqnum = 1;

但是,我不确定您的示例数据与您的查询有什么关系。您只显示一个表的数据,但您的查询提到了其他几个表。