在数码港的家电使用场景中,很多智能设备后台都依赖数据库记录运行日志。比如家里的智能空调、冰箱或洗衣机,它们每天上报的工作状态都会存进数据库。有时候需要查一下上个月某台设备的异常记录,这时候就得用SQL准确查出上个月的数据。
怎么用SQL拿到上个月的数据?
假设你家的智能热水器把每次加热的时间、水温、耗电都记在一张叫 heater_logs 的表里,字段有 id、temperature、power_usage 和 record_time。你想看看上个月的所有记录,可以用下面这句SQL:
SELECT * FROM heater_logs
WHERE record_time >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND record_time < DATE_TRUNC('month', CURRENT_DATE);
这条语句的意思是:选出 record_time 在上个月第一天零点开始,到这个月第一天之前的所有数据。适用于 PostgreSQL 环境,精准又高效。
MySQL 里该怎么写?
如果你家后台用的是 MySQL,语法稍微不一样,但逻辑一样清楚。可以这样写:
SELECT * FROM heater_logs
WHERE record_time >= DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y-%m-01')
AND record_time < DATE_FORMAT(CURRENT_DATE, '%Y-%m-01');
这里利用了 DATE_FORMAT 把日期拉回到月初,再通过减一个月得到上个月的第一天。适合大多数家用物联网系统的数据库结构。
更简单的写法也行得通
如果不需要那么精确到秒,只想粗略查上个月的数据,还可以用年月匹配的方式。比如:
SELECT * FROM heater_logs
WHERE YEAR(record_time) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(record_time) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH);
这种方式读起来更直观,适合刚接触家电后台管理的小白用户。不过在数据量大的时候会慢一点,毕竟没法走索引优化。
实际用哪种方法,得看你家那套系统跑的是什么数据库。反正只要记住,查上个月数据,关键就是算准时间范围,别把本月的混进来就行。