我有一个数据库,其中我存储数据,一旦更新,将保存更新的数据..(除状态和批准者外,具有相同的行数据) 为了更好地理解,这是我的表
| 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'
有没有其他方法可以获得我想要的行中的所有列? 我所需要的只是查询所有请求而不在我的网站上复制它..
任何帮助都可以。
答案 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;
但是,我不确定您的示例数据与您的查询有什么关系。您只显示一个表的数据,但您的查询提到了其他几个表。