MySQL查询DATETIME字段中指定关联ID对应最早日期的全部数据
MySQL 查询方案
假设你的表名为your_table_name,可根据实际业务表名替换。
方案1:兼容所有MySQL版本的子查询写法
SELECT * FROM your_table_name WHERE material_referenceid = 13 AND material_cas = ( SELECT MIN(material_cas) FROM your_table_name WHERE material_referenceid = 13 );
逻辑说明
- 内层子查询先查出
material_referenceid=13的所有记录里最小的material_cas值 - 外层查询筛选出同时满足
material_referenceid=13、material_cas等于上述最小值的所有行,可正确返回最早日期对应的全部行 - 将语句中的数值13替换为你需要查询的任意
material_referenceid值即可生效
方案2:MySQL 8.0+ 窗口函数写法
如果你的MySQL版本在8.0及以上,可以用RANK()窗口函数实现,扩展性更强,后续需要批量查询多个关联ID的最早日期记录时修改成本更低:
WITH ranked_material AS ( SELECT *, RANK() OVER(PARTITION BY material_referenceid ORDER BY material_cas ASC) AS rk FROM your_table_name WHERE material_referenceid = 13 ) SELECT material_id, material_referenceid, material_cas FROM ranked_material WHERE rk = 1;
逻辑说明
- 先对
material_referenceid=13的所有记录按material_cas升序排序,相同日期的记录排名一致 - 筛选排名为1的记录就是最早日期的全部行
内容的提问来源于stack exchange,提问作者Michal Čabala
相关产品推荐
相关产品推荐

