微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 order by 的 MySQL8 窗口函数不起作用

如何解决带有 order by 的 MySQL8 窗口函数不起作用

我有一张这样的桌子:

+-------------------+-------------+-------+
|       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 举报,一经查实,本站将立刻删除。