Выберите отдельную строку или определенную строку значений, если они не различаются - PullRequest
0 голосов
/ 22 мая 2018

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

Я попытался опубликовать изображение экрана с мобильного, к которому не удалось прикрепиться.Также не удалось опубликовать sql, который я пробовал, поскольку это официально здесь запрещено.

Моя попытка объяснить вопрос ниже

Persid.      Value.    Date
1                 a
1                 a
1                 a
2                 b
2                 a
2                 a

Ожидаемый результат

1           a.       Latest date
2           b        any date

Я пытался использовать group by для столбцов id и value, чтобы получить счет, но я не могу понять, как использовать этот счет для фильтрации записей.

Любая помощь очень ценится:)

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать row_number():

select id, value, date
from (select t.*,
             row_number() over (partition by persid
                                order by value desc, date desc
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

Получает самую последнюю дату для любого значения.Обратите внимание, что value desc так, что «b» появляется перед «a».Если ваши значения не упорядочены по алфавиту, вы можете использовать case или другой механизм для установки правильного порядка сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...