根据列的MAX值选择行

时间:2011-04-27 18:22:36

标签: sql oracle

我在Oracle SQL中遇到了一个小问题。

我有一个包含以下列的表 (ID,AttributeID,AttributeValue,Version)。

我想在表中查询给定属性id的最新版本。

例如,如果我有以下数据

ID AttrId AttrValue Version
1  1      A         1 
1  1      B         2 
1  1      C         3
2  1      F         1
2  2      G         1

如果我决定按属性ID 1过滤,我想得到

ID AttrId AttrValue Version
1  1      C         3
2  1      F         1

如果我提供id,查询将非常简单,因为我可以先过滤 通过ID和AttributeID,然后找到版本列的最大值。

然而,当我没有给出ID时,我仍在寻找并考虑解决方案 我想只根据AttributeID获取一个列表。

任何提示都会有很大帮助!

谢谢!

3 个答案:

答案 0 :(得分:2)

WITH T
     AS (SELECT ID,
                AttributeID,
                AttributeValue,
                Version,
                row_number() over (PARTITION BY id ORDER BY version DESC) AS rn
         FROM   your_table
         WHERE AttributeID=1)
SELECT ID,
       AttributeID,
       AttributeValue,
       Version
FROM   T
WHERE  rn = 1; 

答案 1 :(得分:2)

Select ...
From EAV
Where AttributeId = @AttributeId
    And Version =   (
                    Select Max( E1.Version )
                    From EAV As E1
                    Where E1.Id = EAV.Id
                        And E1.AttributeId = EAV.AttributeId
                    )

答案 2 :(得分:2)

这会有帮助吗?

select * from attributes a
where attribute_id := given_attribute_id
and version_id = (
 select max( version_id ) from attributes b
where attribute_id := given_attibute_id 
and b.id = a.id 

)