问题描述
我有一张这样的桌子:
+-------------------+-------------+-------+
| monitor_time|monitor_value|content|
+-------------------+-------------+-------+
|2020-12-01 11:43:27| 20| line|
|2020-11-03 11:43:48| 15| line|
|2020-10-21 11:44:27| 10| line|
|2020-10-18 11:44:27| 10| line|
|2020-10-10 11:44:27| 8| line|
+-------------------+-------------+-------+
我想查询当前行之间大约40天的数据对应的值(例如:38天前和41天前,以41天作为答案), 这是我的 sql:
select
first_value(monitor_value) over oldest_first as project_start_val,first_value(monitor_time) over oldest_first as project_start_time
from sub_test sm
window oldest_first as (partition by content order by abs( datediff( monitor_time,date_sub( sm.monitor_time,INTERVAL 40 DAY ) ) ) ASC )
我使用了窗口函数 按 abs( datediff( monitor_time,INTERVAL 40 DAY ) ) ) 得到答案,但我发现它不起作用,结果总是采用最大监视器时间:
+-----------------+-------------------+
|project_start_val| project_start_time|
+-----------------+-------------------+
| 20|2020-12-01 11:43:27|
| 20|2020-12-01 11:43:27|
| 20|2020-12-01 11:43:27|
| 20|2020-12-01 11:43:27|
| 20|2020-12-01 11:43:27|
+-----------------+-------------------+
正确答案应该是:
+-----------------+-------------------+
|project_start_val| project_start_time|
+-----------------+-------------------+
| 10|2020-10-21 11:44:27|
| 8|2020-10-10 11:44:27|
| 8|2020-10-10 11:44:27|
| 8|2020-10-10 11:44:27|
| 8|2020-10-10 11:44:27|
+-----------------+-------------------+
我的 sql 有什么问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)