Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用lead/lag获得SQL中最后n个值的聚合_Mysql_Sql_Analytics - Fatal编程技术网

Mysql 如何使用lead/lag获得SQL中最后n个值的聚合

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,

我正在考虑在三行上聚合最后一行(即尝试最后三行中列的最大值)。有没有一种方法我们可以一起使用LAG和MAX。我可以通过创建一个函数并使用它来实现,但它没有效率。更好的方法是什么

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;

**将前两行更改为前两行**

请提供示例数据和所需结果。请提供示例数据和所需结果。感谢快速回答。。它工作得很好。对代码做了一个小改动来修复错误谢谢你的快速回答。。它工作得很好。对代码做了微小的更改以修复错误