【发布时间】:2020-02-07 20:22:35
【问题描述】:
假设有 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 列表 (master_id_list) 和数值 (num_value)。
对于master_id_list 中的每个ID,我应该得到一个详细记录:
- 如果是
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 | ... | ... |
--------------------------------------------
【问题讨论】:
-
我很困惑。在您的示例数据中没有调用
num_value。 -
@GordonLinoff,
num_value是f_value的输入参数。如果num_value介于MIN( f_value )和MAX( f_value )之间,我需要找到第一个f_value >= num_value。否则我需要得到MIN( f_value )或MAX( f_value )。
标签: sql firebird firebird-3.0