为什么我的查询没有以正确的方式获得订单?

时间:2016-06-27 18:53:05

标签: mysql sql

我得到一个查询,我应该显示我的用户的最新记录,我可以按用户过滤或不过滤。以下是数据的示例

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:22
SELECT id, MAX(fecha), no_emp
FROM of_direcciones
WHERE no_emp= '69976'
GROUP BY no_emp;

我的查询有什么问题? 提前致谢

2 个答案:

答案 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';