选择独特的价值,只带来最新的价值

时间:2020-03-25 19:53:43

标签: sql sql-server

我有一个表,存储每个交易的不同状态。每个交易可以具有多种状态(待处理,已拒绝,已批准等)。

我需要构建一个仅包含每笔交易的最新状态的查询。

用于存储状态的表的定义为:

[dbo].[Cuotas_Estado]
ID int (PK)
IdCuota int          (references table dbo.Cuotas - FK)
IdEstado int         (references table dbo.Estados - FK)

这是3个表的体系结构:

arch

在表dbo.Cuotas_Estado上运行简单的SELECT语句时,您将获得:

SELECT
    *
FROM [dbo].[Cuotas_Estado] [E]

sel1

但是我需要的结果是:

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;

这将带来以下结果:

enter image description here

因此,如您所见,它为条目9和条目11带来了双精度值,我需要查询仅带来最新的IdEstado列(条目9中的3和条目11中的4)。

2 个答案:

答案 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)上的索引,这可能是最有效的方法。

相关问题