我有一张桌子,称之为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')
有什么想法吗?我可以想到一个蛮力方法,但我确信有一些我想不起的优雅。
答案 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;