Как показать последние данные (максимальные данные) каждой группы на MySQL - PullRequest
0 голосов
/ 05 октября 2018

У меня есть запрос, подобный приведенному ниже:

SELECT kd.id_karir, kd.nama, kd.kelamin, 
        (YEAR(NOW())-YEAR(tanggal)) usia, MAX(pf.jenis), pf.jenis, 
        pf.nama AS pendidikan, pf.jurusan, kd.alamat, kd.telepon, 
        kd.handphone, kd.email, kd.tempat AS tempat_lahir, 
        kd.tanggal AS tanggal_lahir 
FROM keadaan_diri AS kd 
    LEFT OUTER JOIN pendidikan_formal AS pf ON (kd.id_karir = pf.id_karir) 
WHERE kd.id_karir = 'P1409047' 
GROUP BY kd.id_karir 
ORDER BY kd.nama ASC, pf.jenis DESC

Я имею в виду возврат последних данных в таблице pendidikan_formal с использованием max и group, но запрос не работает.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы можете использовать коррелированный подзапрос.Ваш вопрос немного расплывчатый;Я предполагаю, что id_karir - это группа, а tanggal - это дата.

Если я правильно понимаю, это относится к вашему запросу как:

SELECT kd.id_karir, kd.nama, kd.kelamin, 
        (YEAR(NOW())-YEAR(tanggal)) usia, pf.jenis, pf.jenis, 
        pf.nama AS pendidikan, pf.jurusan, kd.alamat, kd.telepon, 
        kd.handphone, kd.email, kd.tempat AS tempat_lahir, 
        kd.tanggal AS tanggal_lahir 
FROM keadaan_diri kd LEFT OUTER JOIN
     pendidikan_formal pf
     ON kd.id_karir = pf.id_karir AND
        pf.tanggal = (SELECT MAX(pf2.tanggal) FROM pendidikan_formal pf2 WHERE pf2.id_karir = pf.id_karir)

Это не агрегация запрос.Это фильтрация запроса.

0 голосов
/ 05 октября 2018

Прежде всего, вы можете / должны (в зависимости от конфигурации MySQL) выбирать и упорядочивать только по столбцам, которые являются частью вашего предложения group by.Для всех остальных столбцов необходимо указать функцию агрегирования .Например, допустим, у вас есть две записи о людях, у которых одинаковое имя и разный возраст.Когда вы группируете по имени, вы должны выбрать одно из двух значений возраста (максимальный, минимальный, средний, ...).Если вас это не волнует, вы можете отключить режим sql only full group by.Однако я бы не советовал.

Чтобы получить одну запись с каким-то максимальным значением, однако, группировка по не является правильным подходом.Взгляните на эти примеры:

Подвыбрать:

SELECT name, age, ...
FROM   humans
WHERE  age=(SELECT MAX(age) FROM humans);

Сортировать по и ограничить:

SELECT name, age, ...
FROM humans
ORDER BY age DESC
LIMIT 1;

Оставить соединение:

SELECT name, age, ...
FROM humans h1
LEFT JOIN humans h2 ON h1.age < h2.age
WHERE h2.age IS NULL;

Теперь, если вы хотите все максимальное количество строк на группу , отметьте один из этих ответов с тегом .

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