MySQL之前和之后的第一行id大于当前行

时间:2018-02-24 08:38:20

标签: mysql sql mysql-workbench

您好我想添加一个名为MMV的列,它将识别当前行之前和之后的第一行,该行大于该值。如果没有适用的行,则使用表格大小的最大值和分钟数。结果将是两次计算的最小值。

下面的图片显示了订单19-31但是基于表格的记录有50个条目的表格。只是excel的一个简单例子。

希望有人可以提供帮助。

提前致谢。

enter image description here

1 个答案:

答案 0 :(得分:1)

一个想法是使用相关子查询。

使用其中两个,然后使用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。