Выберите строки на основе значений MAX столбца - PullRequest
3 голосов
/ 27 апреля 2011

У меня небольшая проблема в Oracle SQL.

У меня есть таблица со следующими столбцами (ID, AttributeID, AttributeValue, Version).

Я бы хотел запросить у таблицы последнюю версию, указав идентификатор атрибута.

Например, если у меня есть следующие данные

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

Запрос будет очень простым, если я предоставлю идентификатор, потому что я могу сначала отфильтровать по идентификатору и AttributeID, а затем найдите максимальное значение для столбца версии.

Тем не менее, я все еще ищу и думаю о решении, когда идентификатор не указан, и хотел бы получить список только на основе AttributeID.

Любые советы очень помогут!

спасибо!

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011
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 голосов
/ 27 апреля 2011

Поможет ли это?

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 

)
2 голосов
/ 27 апреля 2011
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; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...