【发布时间】:2018-02-24 08:38:19
【问题描述】:
您好,我希望添加一个名为 MMV 的列,该列将标识大于该值的当前行之前和之后的第一行。如果没有适用的行,请使用表大小的最大值和最小值。结果将是两次计算的最小值。
下图显示订单 19 - 31,但注释基于包含 50 个条目的表格。只是一个关于 excel 的简单示例。
希望有人能帮忙。
提前致谢。
【问题讨论】:
标签: mysql sql mysql-workbench
您好,我希望添加一个名为 MMV 的列,该列将标识大于该值的当前行之前和之后的第一行。如果没有适用的行,请使用表大小的最大值和最小值。结果将是两次计算的最小值。
下图显示订单 19 - 31,但注释基于包含 50 个条目的表格。只是一个关于 excel 的简单示例。
希望有人能帮忙。
提前致谢。
【问题讨论】:
标签: mysql sql mysql-workbench
一个想法是使用相关子查询。
其中两个,然后用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。
【讨论】: