如何在MySQL中查询仅含最早日期的记录(未知最早日期时)
获取表中最早日期的所有记录(MySQL)
嘿,这个需求我之前也碰到过,给你分享两种实用的写法,都能在不知道最早日期的情况下直接拿到目标记录:
方法一:子查询 + MIN() 函数(兼容性拉满)
这是最经典的方案,几乎适配所有MySQL版本,逻辑也特别直观:先通过子查询算出表中的最早日期,再筛选出所有日期等于这个值的记录。
假设你的表名叫your_table,把下面语句里的表名替换成你实际的表名就行:
SELECT * FROM your_table WHERE date_col = (SELECT MIN(date_col) FROM your_table);
执行后就能返回所有date_col等于最早日期的记录,完全匹配你想要的结果。
方法二:窗口函数(MySQL 8.0+ 适用)
如果你的MySQL版本是8.0或更高,用窗口函数会更灵活——以后要是需要扩展需求(比如查每个分组的最早日期记录),改起来也方便。这里用RANK()函数,它会给相同日期的记录分配相同的排名,不会漏掉任何一条最早日期的记录:
SELECT id, date_col, `more data` FROM ( SELECT *, RANK() OVER (ORDER BY date_col ASC) AS date_rank FROM your_table ) ranked_data WHERE date_rank = 1;
内层查询给每条记录按日期升序排名,最早的日期排名为1,外层筛选出排名为1的记录就搞定了。
两种方法都能满足需求,要是需要兼容老版本MySQL选第一种;新版本的话,第二种扩展性更强~
内容的提问来源于stack exchange,提问作者Scotty
相关产品推荐
相关产品推荐

