我在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获取一个列表。
任何提示都会有很大帮助!
谢谢!
答案 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
)