我得到一个查询,我应该显示我的用户的最新记录,我可以按用户过滤或不过滤。以下是数据的示例
id fecha no_emp
1326 2016-06-20 16:31:48 69976
1327 2016-06-20 16:31:38 69976
1328 2016-06-20 16:31:48 69976
1329 2016-06-21 17:22:37 69976
1330 2016-06-21 17:22:37 69976
1331 2016-06-27 13:06:22 69976
我应该得到身份证1331,并且约会2016-06-27 13:06:22 但继续获得id 1326和日期2016-06-20 16:31:48 如果我的查询是:
SELECT id, fecha, no_emp
FROM of_direcciones
WHERE no_emp = '69976'
GROUP BY no_emp
order by ID DESC;
如果我的查询是:
,我会获得id 13226和日期2016-06-27 13:06:22SELECT id, MAX(fecha), no_emp
FROM of_direcciones
WHERE no_emp= '69976'
GROUP BY no_emp;
我的查询有什么问题? 提前致谢
答案 0 :(得分:4)
您的查询出现的问题是,您按no_emp
进行汇总,然后选择id
子句中不包含的group by
字段。在这种情况下,MySQL从 indeterminate 行返回值。并且,每次调用查询时, indeterminate 行都可能会发生变化。
以下是获取特定用户最新记录的更好方法:
select d.*
from of_direcciones d
where d.no_emp = '69976'
order by d.fecha desc
limit 1;
这甚至可以利用of_direcciones(no_emp, fecha)
上的索引获得最佳效果。
答案 1 :(得分:0)
您应该通过此值和no_emp
获取max(fecha)和过滤器 SELECT id, fecha, no_emp
FROM of_direcciones
where fecha = (select max(fecha,) from of_direcciones
WHERE no_emp= '69976')
AND no_emp= '69976';