是否存在一种常见的模式,如何在数据库(postgresql)中存储这样的条件,然后以简单的方式从数据库中获取这些数据,并在Frontend中将其与我们在Frontend上的值SE进行比较(以获得正确的“值” ”):
condition value
SE < 2 foo
2 ≤ SE <3 bar
3 ≤ SE <4 foo2
4 ≤ SE bar2
谢谢
答案 0 :(得分:3)
这听起来像是Android
的好例子create table data
(
valid_between int4range,
value text
);
insert into data (valid_between, value)
values
('(,2)', 'foo'), -- from infinity to 2
('[2,3)', 'bar'),
('[3,4)', 'foo2'),
('[4,)', 'bar2'); -- from 4 to infinity
要查找对于值3
有效的行,请使用@>
运算符
select *
from data
where valid_between @> 3
可以对范围列进行有效索引,以实现快速搜索。
答案 1 :(得分:1)
最简单的方法可能是使两列分别为“下限”和“上限”:
LB UB ...
-INF 2
2 3
3 5
4 INF
然后按条件查询某项,请使用类似以下内容的
SELECT value FROM (table) WHERE LB <= SE AND SE < UB;
答案 2 :(得分:0)
仅存储下限,然后使用lead
进行实时计算:
Threshold Value
0 foo
2 bar
3 foob
4 barf
with CTE as
(
select t1.*, lead(threshold) over(order by threshold) as nextone
from my_table
)
select CTE.value
from CTE
where my_value >= threshold
and (my_value < nextone or nextone is null)