如何在mysql上显示每个组的最后一个数据(max data)

jm81lzqq  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(313)

我有如下疑问:

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,但查询不起作用。

kr98yfug

kr98yfug1#

首先,您可以/应该(取决于mysql配置)只选择并按列排序,这些列是您的数据库的一部分 group by 条款。对于所有其他列,必须指定聚合函数。例如,假设你有两个人类的记录,都有相同的名字和不同的年龄。按名称分组时,必须从两个年龄值(max、min、average…)中选择一个。如果你不在乎哪个,你可以关闭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;

现在,如果您想要每个组的所有最大行数,请使用标签magest-n-per-group检查其中一个答案。

gzszwxb4

gzszwxb42#

可以使用相关子查询。你的问题有点含糊;我想 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)

这不是聚合查询。这是一个筛选查询。

相关问题