您好,我想添加一个名为 MMV 的列,该列将标识当前行前后的第一行,该行大于该值。如果没有适用的行,请使用表大小的最大值和最小值。结果将是两次计算中的最小值。
下图显示了订单 19 - 31,但注释基于包含 50 个条目的表格。只是一个简单的 excel 示例。
希望有人能提供帮助。
提前致谢。
最佳答案
一个想法是使用相关子查询。
要么使用其中两个,然后使用 LEAST
取较小的值:
select
idorder,
ordervalue,
least(
idorder -
(
select count(*)
from mytable m1
where m1.ordervalue > m.ordervalue
and m1.idorder < m.idorder
),
(
select count(*)
from mytable m1
where m1.ordervalue > m.ordervalue
and m1.idorder > m.idorder
) -
idorder
) as mmv
from mytable m;
或者在一个带有条件聚合的子查询中(即根据条件计数/相加):
select
idorder,
ordervalue,
(
select least(m.idorder - sum(m1.idorder < m.idorder),
sum(m1.idorder > m.idorder) - m.idorder)
from mytable m1
where m1.ordervalue > m.ordervalue
) as mmv
from mytable m;
第二个查询使用了 MySQL 的 true = 1,false = 0。
关于MySQL 前后第一行 id 大于当前行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48960956/