Mysql 如何使用lead/lag获得SQL中最后n个值的聚合
我正在考虑在三行上聚合最后一行(即尝试最后三行中列的最大值)。有没有一种方法我们可以一起使用LAG和MAX。我可以通过创建一个函数并使用它来实现,但它没有效率。更好的方法是什么Mysql 如何使用lead/lag获得SQL中最后n个值的聚合,mysql,sql,analytics,Mysql,Sql,Analytics,我正在考虑在三行上聚合最后一行(即尝试最后三行中列的最大值)。有没有一种方法我们可以一起使用LAG和MAX。我可以通过创建一个函数并使用它来实现,但它没有效率。更好的方法是什么 select symbol, td_timestamp, open, vol_range, fn_getmaxvalue(high, hihi, hihi2) as highest from (select symbol, td_timestamp, open, high, low,
select symbol, td_timestamp, open, vol_range, fn_getmaxvalue(high, hihi, hihi2) as highest
from
(select symbol, td_timestamp, open, high, low,
volume-lag(volume,2) over (partition by symbol order by td_timestamp ) vol_chg,
lag(high,1) over (partition by symbol order by td_timestamp ) hihi,
lag(high,2) over (partition by symbol order by td_timestamp ) hihi2
from tb_nfbnf where trade_date='2020-02-28' and processed_flg is null
order by symbol, td_timestamp)a
如果我理解正确,您需要一个正在运行的max,它将在window函数中使用window frame子句:
select t.*,
max(high) over (partition by symbol
order by td_timestamp
rows between 2 preceding and current row
) as max_hi_3rows
from tb_nfbnf t
where trade_date = '2020-02-28' and processed_flg is null
order by symbol, td_timestamp;
**从前面的两行更改为前面的两行**如果我理解正确,您需要一个正在运行的max。该max将在窗口函数中使用window frame子句:
select t.*,
max(high) over (partition by symbol
order by td_timestamp
rows between 2 preceding and current row
) as max_hi_3rows
from tb_nfbnf t
where trade_date = '2020-02-28' and processed_flg is null
order by symbol, td_timestamp;
**将前两行更改为前两行**请提供示例数据和所需结果。请提供示例数据和所需结果。感谢快速回答。。它工作得很好。对代码做了一个小改动来修复错误谢谢你的快速回答。。它工作得很好。对代码做了微小的更改以修复错误