您好,我想添加一个名为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/

10-10 00:58