我有一个包含以下各列的表:

id int(10)
winner int(10)
profit double
created datetime


我正在尝试创建一个查询,该查询返回最大的亏损,或就利润列而言“达到谷底下降”。 (更多info on drawdown here。)

理想情况下,它将返回为回撤的开始和结束创建的值以及从开始到结束的获利深度。

编辑:利润列不是累积的,但查询需要查找累积亏损。亏损可能会增加,但是一旦累计利润达到新高,亏损就结束了。这是显示它的line graph。红点和绿点之间的X距离是最大压降。

最佳答案

如果您的目标是连续获得最大的不间断下降,则只需执行以下操作:

set @max_drawdown = 0;select MIN(if(profit < 0, @max_drawdown:=@max_drawdown + (profit), @max_drawdown:=0)) as max_drawdown from your_table order by date;

因此,如果您有以下示例:

日期,利润
1,-1
2,-13
3 3
4,-7
5,-2
6,-2
7,-9
8、0
9,-15


您将获得-20。

07-28 09:57