You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL连续日期筛选问题:查询无结果的原因排查

错误排查分析

首先先明确你的数据表结构和测试数据:

create table weather( id int, recorddate date, temp int, primary key (id) );
insert into weather values (1, '2015-01-01', 10);
insert into weather values (2, '2015-01-02', 15);
insert into weather values (3, '2015-01-03', 20);

你的需求是筛选出温度高于前一天的日期对应的id,但原查询返回0条记录,问题出在两个关键逻辑错误上:

1. 日期与温度的比较逻辑完全颠倒

原查询的子查询里写了:

datediff(a.recorddate, b.recorddate) = -1 and b.temp > a.temp
  • datediff(a.recorddate, b.recorddate) = -1 意味着 a.recorddate = b.recorddate - 1天,也就是b是a的后一天,而不是你需要的“前一天”。如果要找a的前一天记录b,应该是datediff(a.recorddate, b.recorddate) = 1(a比b晚一天)。
  • b.temp > a.temp 是在判断后一天的温度比当前天高,这和你“当前天温度高于前一天”的需求完全相反,应该写成a.temp > b.temp。

2. 主查询的匹配逻辑错误

你误以为where id = (select id from weather b ...)是在“获取符合条件的id”,但实际上这个条件的逻辑是:主查询中每条记录的id必须等于子查询返回的id。
但子查询返回的是b的id(后一天的记录id),而a和b是不同的记录(日期不同,主键id唯一),所以这个等式永远不可能成立,自然没有符合条件的记录返回。

简单来说,你把“要找的目标记录”和“对比的参照记录”搞混了,同时错误地用主键id的相等匹配来关联两个完全不同的记录,导致查询逻辑完全失效。

内容的提问来源于stack exchange,提问作者Cheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:28:32