获取具有最接近匹配数的列

时间:2012-02-20 12:32:38

标签: php mysql

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

3 个答案:

答案 0 :(得分:2)

这是一种方法:

  1. 加入t2到表格t1
  2. 的号码
  3. 将每一行与数字进行比较
  4. 按比较排序,选择第一行
  5. 实现:

    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作为连接条件 - 可能需要对其进行修改以满足您的确切需求。

答案 1 :(得分:-1)

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

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

答案 2 :(得分:-1)

步骤1执行mysql ghetto行号

步骤2将表连接到它自己的下一个最高row_number

步骤3在t2

中查找数字与下一个最高数字之间的数字

第4步享受另一个精彩的星期一。

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