MySQL:如果存在,则获得大于数字的结果,但如果不存在,则获取结果。

时间:2011-12-09 17:55:15

标签: mysql

我有一张桌子,称之为MyTable,有一栏,说“myvalue”。

我需要一个带有数字的查询,并根据与myvalue的某些比较返回一行。

如果number = myvalue,那么这是正确的行。如果没有匹配,那么我需要取值刚好超过数字。如果那不存在,我需要取下一个数字以下的值。

例如,假设myvalue列具有以下值:

100
200
300
400
500

If I query with number=50 it will return the row with '100'.
If I query with number=100 it will return the row with '100'.  
If I query with number=101 it will return the row with '200'.
If I query with number=450 it will return the row with '500'.
If I query with number=570 it will return the row with '500'.

到目前为止,我有一个查询,它将返回匹配值或正确的值,但我不知道如果上面的那个不存在,如何让它返回正确的值?

这就是我现在所做的:

SELECT * FROM MyTable WHERE myvalue >= 'number' ORDER BY myvalue ASC LIMIT 1

(当然用值代替'number')

有什么想法吗?我可以想到一个蛮力方法,但我确信有一些我想不起的优雅。

2 个答案:

答案 0 :(得分:1)

SELECT *
FROM (
      (
        SELECT *
        FROM MyTable
        WHERE myvalue >= 'number'
        ORDER BY myvalue ASC
        LIMIT 1
      )
      UNION 
      (
        SELECT *
        FROM MyTable
        WHERE myvalue <= 'number'
        ORDER BY myvalue DESC
        LIMIT 1
      )
    ) AS temp
ORDER BY myvalue DESC 
LIMIT 1

答案 1 :(得分:0)

SELECT * FROM MyTable WHERE myvalue >= 'number' ORDER BY abs('number'-myvalue) ASC ,myvalue DESC LIMIT 1;