Представьте, что есть 2 таблицы, назовем их «Master» и «Detail»:
Master
--------------------------------
| ID | field_1 | ... | field_n |
--------------------------------
Detail
--------------------------------------------
| ID | master_id | f_value | ... | field_n |
--------------------------------------------
| 1 | 1 | 0.03 | ... | ... |
--------------------------------------------
| 2 | 1 | 0.95 | ... | ... |
--------------------------------------------
| 3 | 1 | 1.22 | ... | ... |
--------------------------------------------
| 4 | 2 | 0.91 | ... | ... |
--------------------------------------------
| 5 | 2 | 0.93 | ... | ... |
--------------------------------------------
| 6 | 2 | 2.07 | ... | ... |
--------------------------------------------
Есть 2 входных параметра: список основных идентификаторов (master_id_list
) и цифра c значение (num_value
).
Для каждого ID
в master_id_list
я должен получить одну запись сведений:
- Если
num_value < MIN( f_value )
, это должно быть запись с MIN( f_value )
- Если
num_value > MAX( f_value )
, это должна быть запись с MAX( f_value )
- В противном случае это должна быть запись с ближайшим максимальным
f_value
Пример 1. master_id_list = [ 1, 2 ]
, num_value = 0
. Результат:
--------------------------------------------
| 1 | 1 | 0.03 | ... | ... |
--------------------------------------------
| 4 | 2 | 0.91 | ... | ... |
--------------------------------------------
Пример2. master_id_list = [ 1, 2 ]
, num_value = 50
. Результат:
--------------------------------------------
| 3 | 1 | 1.22 | ... | ... |
--------------------------------------------
| 6 | 2 | 2.07 | ... | ... |
--------------------------------------------
Пример 3. master_id_list = [ 1, 2 ]
, num_value = 0.94
. Результат:
--------------------------------------------
| 2 | 1 | 0.95 | ... | ... |
--------------------------------------------
| 6 | 2 | 2.07 | ... | ... |
--------------------------------------------
Возможно ли это одним запросом SQL? Я пытался «поиграть» с решениями здесь и здесь , но не получилось.