MySQL中如何基于Unix时间戳查询近1个月及1周的数据?
正确的ClickHouse查询语句及错误修复
为什么原语句报错?
你之前的写法不符合ClickHouse的日期运算规则:直接对from_unixtime()返回的DateTime值执行- interval操作会触发函数参数不匹配错误,ClickHouse要求使用专门的时间偏移函数来处理日期时间的增减。
1. 查询指定时间(1689219182)往前推1个月的数据
用addMonths()函数实现精准的月份偏移(自动处理不同月份的天数差异),再转回Unix时间戳:
SELECT * FROM table WHERE time < unixTimestamp(addMonths(fromUnixTimestamp(1689219182), -1));
如果可以接受按30天近似计算(不推荐,存在月份天数误差),也可以直接对时间戳做减法:
SELECT * FROM table WHERE time < 1689219182 - 30*24*3600;
2. 查询近1周的数据
基于当前时间往前推1周(获取最近7天的数据)
-- 推荐写法:用addWeeks实现精准周偏移 SELECT * FROM table WHERE time > unixTimestamp(addWeeks(now(), -1)); -- 简化写法(新版本ClickHouse支持直接对now()做interval运算) SELECT * FROM table WHERE time >= unixTimestamp(now() - INTERVAL 1 WEEK);
基于指定时间1689219182往前推1周
SELECT * FROM table WHERE time < unixTimestamp(addWeeks(fromUnixTimestamp(1689219182), -1));
额外提示
- ClickHouse中
fromUnixTimestamp()和from_unixtime()、unixTimestamp()和unix_timestamp()功能完全一致,前者是更符合ClickHouse风格的命名。 - 涉及月份偏移时,务必用
addMonths(),避免固定天数计算带来的误差(比如2月只有28/29天,大月有31天)。
内容的提问来源于stack exchange,提问作者Byte
相关产品推荐
相关产品推荐

