我试图从数据库中获取用户拥有的最新证书。我只想看到最新的,而不是所有其他的,所以我使用group by然后通过主表中的唯一ID进行排序。
没有小组这个完美的工作。我看到上传的最后一个证书,然后是下面的所有其他证书。
一旦我添加该组,我就会看到上传的第一个证书,这可能是多年前的无意义。
我的查询非常大,因为我从其他表中提取了很多其他信息。
这是我的查询。
SELECT
usercert.*,
cert.*,
certCat.certCatName,
certTask.certTaskName ,
certStatus.certStatusName
FROM
`usercert`
INNER JOIN
cert
ON
cert.idcert = usercert.idcert
INNER JOIN
certCat
ON
certCat.idcertCat = cert.idcertCat
INNER JOIN
certTask
ON
certTask.idcertTask = usercert.idcertTask
INNER JOIN
certStatus
ON
certStatus.idcertStatus = usercert.idcertStatus
WHERE
usercert.iduser=%s
GROUP BY
usercert.idcert
ORDER BY
usercert.usercertEnd DESC
答案 0 :(得分:2)
SELECT
usercert.*,
cert.*,
certCat.certCatName,
certTask.certTaskName ,
certStatus.certStatusName
FROM
`usercert`
INNER JOIN
cert
ON
cert.idcert = usercert.idcert
INNER JOIN
certCat
ON
certCat.idcertCat = cert.idcertCat
INNER JOIN
certTask
ON
certTask.idcertTask = usercert.idcertTask
INNER JOIN
certStatus
ON
certStatus.idcertStatus = usercert.idcertSttus
WHERE
usercert.iduser=%s
ORDER BY
usercert.usercertEnd
DESC limit 0,1
在这个查询中,它将按降序排列所有记录,这意味着最后插入的行将首先出现,限制0,1表示它将从0开始并获取1条记录就是它...
答案 1 :(得分:1)
您可以使用MAX()
:
SELECT ... FROM ... WHERE ... ORDER BY MAX(usercert.usercertEnd)
或LIMIT
:
SELECT ... FROM ... WHERE ... ORDER BY usercert.usercertEnd DESC LIMIT 1