【问题标题】:MySQL First row id before and after that is greater than current rowMySQL 前后的第一行 id 大于当前行
【发布时间】:2018-02-24 08:38:19
【问题描述】:

您好,我希望添加一个名为 MMV 的列,该列将标识大于该值的当前行之前和之后的第一行。如果没有适用的行,请使用表大小的最大值和最小值。结果将是两次计算的最小值。

下图显示订单 19 - 31,但注释基于包含 50 个条目的表格。只是一个关于 excel 的简单示例。

希望有人能帮忙。

提前致谢。

【问题讨论】:

    标签: mysql sql mysql-workbench


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2020-10-30
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多