Как узнать, может ли число содержаться в определенном диапазоне c в Delphi с использованием БД Firebird? - PullRequest
1 голос
/ 24 февраля 2020

У меня есть таблица, в которой указаны цены на конкретные c метали c детали с разными размерами. Чтобы найти правильную цену, мне нужно найти поле, в котором диаметр соответствует размеру.

Возможно, что диапазон не существует из-за первого заказа специальных размеров или не произведенные детали, такие как очень маленькие кусочки -> 1-9.

Например:

Для детали диаметром D, равной 37, следует найти цену P обозначено X (потому что 37 находится в диапазоне 35-49).

D(mm) :  10  | 20  |  30  |  35  |  50  |  60 |

P($)  :  45  | 46  |  70  |   X  |  89  | 100 |

Как мне добиться этого в моем коде Delphi, используя запрос SQL к базе данных Firebird?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2020

Чтобы выбрать первый диаметр, меньший или равный требуемому диаметру

select price
from component_price
where diameter <= 37
order by diameter desc
fetch first row only

Примечание, fetch first row only было введено в Firebird 3. Если вы используете более раннюю версию , вам нужно будет использовать FIRST или ROWS вместо.

3 голосов
/ 24 февраля 2020

Вы можете выбрать одну строку, используя фильтрацию и ограничившись одной строкой:

select first 1 t.*
from t
where t.d <= 37
order by t.d desc;
...