我面临以下问题。。。给出以下数据:表:投票
=========
value
=========
10
25
38
90
92
93
98
100
120
如果下一个值和以前接受的值之间的差值大于第一个值的10%,我只返回值:
if abs(int(a)-int(b))*100/int(a) < 10:
return True
所以最后的列表应该是(我在方括号中加了%的差异):
==========
result
==========
10 ()
25 (150%)
38 (52%)
90 (136%)
100 (11%)
120 (20%)
查询还应首先对这些值进行排序。
我可以用代码来实现它(如上所示),但是我没有机会接近直接查询。
mysql版本8.0.19
2条答案
按热度按时间fgw7neuy1#
您没有提到您使用的是哪个版本的mysql,所以我假设它是一个现代版本(8.x)。你可以用
LAG()
. 例如:juzqafwq2#
在mysql 8.0中,您可以使用
lag()
. 假设您想按value
,即:如果要使用不同的排序列,则可以更改
order by
子句使用相关列。在早期版本中,一个选项是相关子查询:
要在此处使用另一个排序列,您需要更改
where
条款和order by
子查询的子句。另一方面,如果您想根据与先前所选行的比率来选择下一行,那么这是另一个问题。您需要某种迭代过程:在sql中,一种方法是递归查询:
查询枚举这些值,然后依次遍历数据集,同时跟踪最后选定的值,并对应出现在最终结果集中的记录设置标志。