[英]Select rows based on MAX values of a column
我在 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 的列表。
任何提示都会有很大帮助!
谢谢!
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;
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
)
这会有帮助吗?
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
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.