MySQL 前后第一行 id 大于当前行

标签 mysql sql mysql-workbench

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

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

希望有人能提供帮助。

提前致谢。

enter image description here

最佳答案

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

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

相关文章:

mysql - 创建和运行存储过程的权限

php - MYSQL - 多维数组 - 循环还是递归?

sql - SQL Server 中的条件值替换

php - 如果我的应用程序的许多 Laravel 4 查询需要是 DB::raw,那么使用 Eloquent 有什么优势?

sql - 使用 SQL 按周分组

sql - 在 SQL 语句中调用函数

MySQL 工作台 "->"支持

mysql - SQL 用更快的东西替换连接

php - 查询 Eloquent hasMany 返回 columnize 错误

mysql - 在 MySQL 中创建过程