(my)SQL:从unique persons中选择日志文件中的20个最新条目
我有一个日志文件,它记录各种表的插入/删除/更新。 例如,我想了解最近20个人的概况,他们记录了更新的位置,按上次更新日期时间描述排序 我现在得到的是:(my)SQL:从unique persons中选择日志文件中的20个最新条目,sql,mysql,Sql,Mysql,我有一个日志文件,它记录各种表的插入/删除/更新。 例如,我想了解最近20个人的概况,他们记录了更新的位置,按上次更新日期时间描述排序 我现在得到的是: SELECT DISTINCT logfile.idvalue, DATE_FORMAT(logfile.logDateTime,'%d-%m-%Y %H:%i') AS thedatetime, CONCAT_WS(' ',people.peopleSurname,people.peopleLastname) AS peopleName F
SELECT DISTINCT logfile.idvalue, DATE_FORMAT(logfile.logDateTime,'%d-%m-%Y %H:%i') AS thedatetime, CONCAT_WS(' ',people.peopleSurname,people.peopleLastname) AS peopleName
FROM logfile,people
WHERE 0=0
AND logfile.tablename='people'
AND logfile.action='update'
AND logfile.idvalue=people.peopleID
GROUP BY logfile.idvalue
ORDER BY logfile.logDateTime DESC,logfile.idvalue DESC
但这会导致logDateTimes与最新(最大)“更新条目”的日期时间不对应
我错过了什么
谢谢
巴特
创建以下索引:
(tablename, action, idvalue, logdatetime)
(tablename, action, logdatetime)
让它快速工作。也许这会有一些用处
SELECT *
FROM (SELECT MAX(logdatetime) AS latest_time,
idvalue AS idvalue
FROM logfile
WHERE tablename = 'people' AND
action = 'update'
GROUP BY idvalue) AS max_times
ORDER BY latest_time DESC
LIMIT 20;
问题 如果在同一个查询中选择logDateTime,则每次此人更新表时都会得到结果,即每人有多个结果 解决方案 而是使用MAX为该用户选择最新的日期时间。您也可以使用别名按最大值订购 测试和工作代码(无子查询!)
我使用了table a alias for people和logfile,使其更易于阅读,并切换到更常见的联接语法。感谢您的回答-第一个解决方案效果很好,可能有更多解决方案解决此问题…:)感谢您的回答-第一个解决方案很好,可能有更多解决方案解决此问题…-)如果如果希望获得更好的性能,则不需要子查询将产生很大的不同。
SELECT *
FROM (SELECT MAX(logdatetime) AS latest_time,
idvalue AS idvalue
FROM logfile
WHERE tablename = 'people' AND
action = 'update'
GROUP BY idvalue) AS max_times
ORDER BY latest_time DESC
LIMIT 20;
SELECT DISTINCT
l.idvalue,
CONCAT_WS(' ',p.peopleSurname,p.peopleLastname) AS peopleName,
DATE_FORMAT(MAX(l.logDateTime),'%d-%m-%Y %H:%i') as thedatetime
FROM
logfile l INNER JOIN people p ON l.idvalue = p.peopleID
WHERE
l.tablename='people' AND l.action='update'
GROUP BY
l.idvalue, p.peopleSurname, p.peopleLastname
ORDER BY
thedatetime DESC, l.idvalue DESC
LIMIT 0, 20;