Как вернуть поле с наибольшим ID NON NULL для столбца `` `GROUP BY```? - PullRequest
0 голосов
/ 02 мая 2018

SELECT email, first_name, last_name from person group_by email order by id desc

Если first_name имеет смесь значений и нулей, и как я могу получить самое последнее значение NOT NULL для столбца?

id | email   | first_name   | last_name
1  | a@b.com |  ted         | smith
2  | a@b.com |  zed         | smith
3  | a@b.com |  NULL        | johnson

Я хочу получить значение zed для first_name.

Ответы [ 3 ]

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

Я бы использовал suquery здесь:

SELECT *
from person p
where id = (select max(id) 
            from person 
            where email = p.email and 
                  first_name is not null) 
order by id desc;
0 голосов
/ 03 мая 2018

Ребята спасибо за помощь.

Я нашел нужный мне ответ. Вы действительно можете разместить заказ в GROUP_CONCAT!

SUBSTRING_INDEX(GROUP_CONCAT(first_name ORDER BY id desc), ',', 1) as recent_first_name

Он группирует concats first_name заказов по идентификатору, а затем получает самый последний из них на основе разделения запятой подстроки.

Кроме того, круто то, что GROUP_CONCAT фильтрует NULL по умолчанию!

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

Предполагая, что у вас есть столбец, такой как person_id, с порядком, вы можете просто сделать:

select p.*
from person p
where (email, person_id) in (select p2.email, max(p2.person_id)
                             from person p2
                             where p2.first_name is not null
                             group by p2.email
                            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...