如何按最新日期或ID从MySQL获取最新数据?修改查询取两年数据
问题1:如何根据最新日期或ID从MySQL中获取最新数据?
按ID获取(假设ID为自增主键)
如果表中ID是自增整数主键,最新数据通常对应最大ID值,两种常用写法:
- 排序取第一条:
SELECT * FROM your_table ORDER BY id DESC LIMIT 1;
- 用MAX()子查询匹配:
SELECT * FROM your_table WHERE id = (SELECT MAX(id) FROM your_table);
按日期字段获取
若表中有记录创建/更新的日期字段(如create_time、update_time),可通过以下方式获取最新数据:
- 排序取第一条:
SELECT * FROM your_table ORDER BY create_time DESC LIMIT 1;
- 用MAX()子查询匹配:
SELECT * FROM your_table WHERE create_time = (SELECT MAX(create_time) FROM your_table);
注意:若存在多条记录日期相同的情况,
LIMIT 1仅返回其中一条;如需所有同最新日期的记录,去掉LIMIT 1即可。
问题2:修改现有查询获取过去两年的近期数据
原查询:
select stagingScriptDB.*, testBedSuiteMapping.template from stagingScriptDB inner join testBedSuiteMapping on testBedSuiteMapping.id = stagingScriptDB.idScriptDB limit 10;
修改后的查询(假设stagingScriptDB表存在时间字段create_time)
select stagingScriptDB.*, testBedSuiteMapping.template from stagingScriptDB inner join testBedSuiteMapping on testBedSuiteMapping.id = stagingScriptDB.idScriptDB where stagingScriptDB.create_time >= DATE_SUB(CURDATE(), INTERVAL 2 YEAR) limit 10;
关键说明
- 日期过滤逻辑:
DATE_SUB(CURDATE(), INTERVAL 2 YEAR)会计算当前日期往前推两年的日期,确保仅查询该时间段内的数据。 - 性能优化:因数据量庞大,需给
stagingScriptDB.create_time字段添加索引,避免全表扫描:
CREATE INDEX idx_stagingScriptDB_create_time ON stagingScriptDB(create_time);
- 字段替换:若实际时间字段不是
create_time,替换为表中对应的字段名即可(如update_time)。 - 获取最新排序数据:如需这两年内的最新数据,可在
limit前添加排序:
order by stagingScriptDB.create_time DESC
内容的提问来源于stack exchange,提问作者AISHWARYA GUPTA
相关产品推荐
相关产品推荐

