MySQL按级别和最近7天过滤记录的SQL查询求助
按级别和最近7天过滤具体记录的解决方案
你的原查询因为使用了COUNT()聚合函数,只会返回统计结果,而且week(tbe.date)的条件写法不完整,无法正确筛选最近7天的数据。要获取符合条件的具体记录,可参考以下写法:
基础版:获取最近7天UTILS级别的所有具体记录
SELECT * FROM tableexample AS tbe WHERE tbe.level = 'UTILS' AND tbe.date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);
DATE_SUB(CURDATE(), INTERVAL 7 DAY)会计算当前日期往前推7天的日期,确保只筛选最近7天内的记录(包含当天)。如果你的date字段是带时间的datetime类型,这个条件依然能覆盖最近7天的所有时间点数据。
限制条数版:取最新的30条记录
如果要像你示例里那样只返回30条最新的记录,加上排序和条数限制即可:
SELECT * FROM tableexample AS tbe WHERE tbe.level = 'UTILS' AND tbe.date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) ORDER BY tbe.date DESC LIMIT 30;
ORDER BY tbe.date DESC按日期倒序排列,让最新的记录排在前面;LIMIT 30限制最多返回30条结果。
不同数据库的适配写法
如果你的数据库不是MySQL,语法略有差异:
SQL Server
SELECT TOP 30 * FROM tableexample AS tbe WHERE tbe.level = 'UTILS' AND tbe.date >= DATEADD(DAY, -7, GETDATE()) ORDER BY tbe.date DESC;
Oracle
SELECT * FROM ( SELECT * FROM tableexample AS tbe WHERE tbe.level = 'UTILS' AND tbe.date >= SYSDATE - 7 ORDER BY tbe.date DESC ) WHERE ROWNUM <= 30;
内容的提问来源于stack exchange,提问作者Emerson
相关产品推荐
相关产品推荐

