mysql 获取最小时间的行记录

  • 2017年8月1日
  • Mysql

-- 【错误写法】利用排序+分页,你会发现得不到正确结果,百度其他人原因有种说法是:
-- 在同时使用order by和limit时,MySQL进行了某些优化,将语句执行逻辑从"where——order by——limit"
-- 变成了"order by——limit——where",导致在某些情况下,
-- 同时使用order by和limit会导致查无结果(或结果数量不足)。具体出现问题与否是与表中数据有关的。
SELECT * FROM wms_material_io WHERE 1=1
    AND WML_COMPAYN_ID=2
    AND WML_MATERIALS_CODE='xxxxxxxxxxx'
    AND WML_DEL=0
ORDER BY WML_CREATETIME ASC
LIMIT 0,1;


-- 【正确用法】需要加个子查询
SELECT * FROM (
    	SELECT * FROM wms_material_io WHERE  1=1
    		AND WML_COMPAYN_ID=2
    		AND WML_MATERIALS_CODE='xxxxxxxxxxx'
    		AND WML_DEL=0
    	ORDER BY WML_CREATETIME ASC) AS tmp_wml
LIMIT 1;


-- 使用子查询(排序+分组)
SELECT * FROM wms_material_io
WHERE WML_ID in(
	SELECT WML_ID FROM wms_material_io 
	WHERE 1=1
		AND WML_COMPAYN_ID=2
		AND WML_MATERIALS_CODE='xxxxxxxxxxx'
		AND WML_DEL=0
	ORDER BY WML_CREATETIME ASC
)
GROUP BY WML_MATERIALS_CODE, WML_COMPAYN_ID;

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注