您好,我想添加一个名为MMV的列,该列将标识当前行之前和之后的第一行,该行大于该值。如果没有适用的行,则使用表大小的max和mins。结果将是两次计算的最小值。
下图显示的是订单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 - MySQL之前和之后的第一行ID大于当前行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48960956/