社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Dojo

Dojo 最近创建的主题
Dojo 最近回复了
11 年前
回复了 Dojo 创建的主题 » 如何在mysql 5.7中使用lag()函数[duplicate]

这是我最喜欢的mysql黑客。

以下是模拟滞后函数的方法:

SET @quot=-1;
select time,company,@quot lag_quote, @quot:=quote curr_quote
  from stocks order by company,time;
  • lag_quote 保留前一行引号的值。第一行@quot是-1。
  • curr_quote 保存当前行的引号的值。

笔记:

  1. order by 子句在这里很重要,就像它在常规语句中一样 窗口功能。
  2. 您可能还想使用lag company 只是为了确定你在计算同一个报价的差异 公司 .
  3. 也可以用同样的方法实现行计数器 @cnt:=@cnt+1

这个方案的优点是,与其他一些方法(如使用聚合函数、存储过程或在应用服务器中处理数据)相比,它在计算上非常精简。

编辑:

现在来谈谈你的问题,以你提到的格式得到结果:

SET @quot=0,@latest=0,company='';
select B.* from (
select A.time,A.change,IF(@comp<>A.company,1,0) as LATEST,@comp:=A.company as company from (
select time,company,quote-@quot as change, @quot:=quote curr_quote
from stocks order by company,time) A
order by company,time desc) B where B.LATEST=1;

嵌套不是相互关联的,所以没有看上去那么糟糕(从计算上讲):)

如果你需要帮助,请告诉我。