2016-12-18 2 views
1

Я хочу сделать sql-запрос, который будет искать базу данных, чтобы найти несколько ближайших значений У меня есть следующий запрос, чтобы найти ближайшее значение.SQL - получить несколько ближайших значений

SELECT * FROM table 
WHERE price >= (50 * .9) and price <= (50 * 1.1) 
order by abs(price - 50) LIMIT 1; 

Сво работает нормально, но я хочу сделать, что он будет искать более одного значения что-то вроде:

SELECT * FROM table 
WHERE price >= (50 * .9) and price <= (50 * 1.1) //here i want one result (limit 1) 
or price >= (50 * 1.9) and price <= (50 * 2.1) //here i want one result (limit 1) 
order by abs(price - 50) 

Я хочу для каждого предела цены 1 не найти все значения. Как я могу это сделать?

// редактирование только что нашли ответ.

(select * 
    from table 
    WHERE price >= (50 * .9) and price <= (50 * 1.1) 
    order by abs(price - 50) 
    limit 1 
) union all 
(select * 
    from table 
    WHERE price >= (50 * 1.9) and price <= (50 * 2.1) 
    order by abs(price - 50) 
    limit 1 
) 
+0

Потому что вы заказываете в порядке возрастания, то второй запрос всегда будет возвращать такой же, как первый (если первый не пуст). это делает первый бесполезным. – VillasV

ответ

0

Как насчет использования union all?

(SELECT * 
FROM table 
WHERE price >= (50 * 0.9) and price <= (50 * 1.1) 
ORDER BY ABS(price - 50) 
LIMIT 1 
) UNION ALL 
(SELECT * 
FROM table 
WHERE price >= (50 * 1.9) and price <= (50 * 2.1) 
ORDER BY ABS(price - 2*50) 
LIMIT 1 
) ; 
+0

'ABS (цена - 2 * 50)'? – GurV

+0

Да, я просто нашел его на другом сайте. Спасибо, в любом случае. –

1

вы хотите этот

SELECT * FROM table 
WHERE price >= (50 * .9) and price <= (50 * 1.1) //here i want one result (limit 1) 
union 
SELECT * FROM table 
WHERE price >= (50 * 1.9) and price <= (50 * 2.1) //here i want one result (limit 1) 
order by abs(price - 50) 
Смежные вопросы