我有一个表,存储每个交易的不同状态。每个交易可以具有多种状态(待处理,已拒绝,已批准等)。
我需要构建一个仅包含每笔交易的最新状态的查询。
用于存储状态的表的定义为:
[dbo].[Cuotas_Estado]
ID int (PK)
IdCuota int (references table dbo.Cuotas - FK)
IdEstado int (references table dbo.Estados - FK)
这是3个表的体系结构:
在表dbo.Cuotas_Estado上运行简单的SELECT语句时,您将获得:
SELECT
*
FROM [dbo].[Cuotas_Estado] [E]
但是我需要的结果是:
IdCuota | IdEstado
2 | 1
3 | 2
9 | 3
10 | 3
11 | 4
我正在运行以下select语句:
SELECT
DISTINCT([E].[IdEstado]),
[E].[IdCuota]
FROM [dbo].[Cuotas_Estado] [E]
ORDER BY
[E].[IdCuota] ASC;
这将带来以下结果:
因此,如您所见,它为条目9和条目11带来了双精度值,我需要查询仅带来最新的IdEstado列(条目9中的3和条目11中的4)。
答案 0 :(得分:2)
你可以试试吗?
with cte as (
select IdEstado,IdCuota,
row_number() over(partition by IdCuota order by fecha desc) as RowNum
from [dbo].[Cuotas_Estado]
)
select IdEstado,IdCuota
from cte
where RowNum = 1
答案 1 :(得分:1)
您可以使用相关子查询:
SELECT e.*
FROM [dbo].[Cuotas_Estado] e
WHERE e.IdEstado = (SELECT MAX(e2.IdEstado)
FROM [dbo].[Cuotas_Estado] e2
WHERE e2.IdCuota = e.IdCuota
);
使用Cuotas_Estado(IdCuota, IdEstado)
上的索引,这可能是最有效的方法。