基于连续三日数值递增条件查询mytable数据的技术需求
筛选连续三日数值逐日递增的记录
嘿,我来帮你搞定这个连续三日数值递增的筛选问题!我们可以用SQL的窗口函数轻松实现这个需求,具体步骤如下:
最终可用的SQL语句
SELECT name, date, value FROM ( SELECT name, date, value, -- 拿到同一品牌前一天的数值 LAG(value, 1) OVER (PARTITION BY name ORDER BY date) AS prev_day_val, -- 拿到同一品牌前两天的数值 LAG(value, 2) OVER (PARTITION BY name ORDER BY date) AS two_days_ago_val FROM mytable ) AS daily_values WHERE value > prev_day_val AND prev_day_val > two_days_ago_val;
运行结果
结合你给出的mytable数据,执行上面的SQL后,只会返回符合条件的记录:
name | date | value -----|------------|------ bmw | 2018-01-03 | 3000
简单解释下逻辑
PARTITION BY name:把数据按品牌分组,这样我们只对比同一个品牌的日期数据,不会搞混不同品牌的数值。ORDER BY date:确保每个分组内的日期是按顺序排列的,这样LAG()函数才能正确拿到前一天和前两天的数值。- 子查询先计算出每个记录对应的昨日、前日数值,外层查询直接用条件
当日数值>昨日数值且昨日数值>前日数值过滤出目标记录。
内容的提问来源于stack exchange,提问作者ks1313
相关产品推荐
相关产品推荐

