正在获取具有最接近匹配编号的列


Getting column with nearest matching number

我有一个数字表,它们是升序的,但不是按模式递增的,让我们把这个表称为t1。在另一个表中,t2,我得到了另一个数字,它可能与t1中的一个数字相同,也可能不同。我想要的是从t1开始的数字,这是从t2开始的第一个较小的数字。例如,如果t1中有数字6000、7000和8000,而t2中的数字是7999,则会得到数字为7000的列。

这里有一种方法:

  1. t2中的数字加入表t1
  2. 将每一行与数字进行比较
  3. 按比较排序,选择第一行

实施:

select t1.*
from t1
inner join t2 on t1.column < t2.number
order by t2.number - t1.column asc
limit 1

注意:我不知道t2中有多少行,所以我给出了on t1.column < t2.number作为联接条件——这可能需要修改以满足您的确切需求。

我希望我能正确理解这一点。如果您想从一个仍然小于或等于其他数字(本例中为7999)的表中获得最大数字,您可以这样做:

SELECT number FROM numbers WHERE number <= 7999 ORDER BY number DESC LIMIT 1

步骤1做mysql ghetto行号

步骤2在下一个最高的行数上将表连接到自身

步骤3找出t2 中该数字与其下一个最高数字之间的数字

第四步享受又一个美妙的星期一。

with temp as (
SELECT  number
        @curRow := @curRow + 1 AS row_number
FROM    t1 l
JOIN    (SELECT @curRow := 0) r
order by number
)
with temp2 as (
select o.number,
      case when n.number is null
          100000000
      else
         n.number
      end higherNum
from temp o
left join temp n on o.row_number = n.row_number+1
)
select *
from temp2 o
inner join t2 n on n.number between o.number and o.higherNum