MySQL Выберите отдельный столбец A из таблицы, в которой существует столбец B, или, если столбец B отсутствует, последний в зависимости от столбца C - PullRequest
0 голосов
/ 31 октября 2019

У меня есть следующие данные в таблице:

Column A, Column B, Column C
ABC     , XYZ     , 1/1/2019
DEF     , null    , 1/1/2019
DEF     , UVW     , 1/2/2019
DEF     , null    , 1/3/2019
GHI     , null    , 1/1/2019
GHI     , null    , 1/3/2019

Я хочу столбец A, где либо столбец B имеет значение, либо просто последнее вхождение. Результаты приведенной выше таблицы должны быть:

ABC, XYZ, 1/1/2019
DEF, UVW, 1/2/2019
GHI. null, 1/3/2019

Спасибо, Саммер

1 Ответ

0 голосов
/ 31 октября 2019

Если подойдет любое значение , используйте агрегацию:

select a, max(b), max(c)
from t
group by a;

Если вы хотите, чтобы последнее не-NULL значение и c было уникальным, то:

select t.*
from t
where t.c = (select t2.c
             from t t2
             where t2.a = t.a
             order by (t2.b is not null) desc, t.c desc
             limit 1
            );

Если c имеет дубликаты и вы используете MySQL 8+, вы также можете сделать:

select t.*
from (select t.*
             row_number() over (partition by a
                                order by (b is not null) desc, c desc
                               ) as seqnum
      from t
     ) t
where seqnum = 1;
...