我有这样的观点:
col_1 col_2 my_date
----- ----- -------
1 5 2011
2 6 2014
3 7 2012
4 8 2011
这样一张桌子:
date_1 date_2 the_value
------ ------ ---------
2010 2012 v1
2013 2015 v2
我想要像Excel VLOOKUP函数那样找到the_value
介于my_date
和date_1
之间的值(date_2
),所以我可以得到这样的结果:
col_1 col_2 my_date the_value
----- ----- ------- ---------
1 5 2011 v1
2 6 2014 v2
3 7 2012 v1
4 8 2011 v1
日期列的类型为DATE
。为简单起见,这些是样本数据。
答案 0 :(得分:8)
这是SQL中使用between
而不是相等连接条件的连接。
select t1.col_1, t1.col_2, t1.my_date, t2.the_value
from table_one t1
join table_two t2 on t1.my_date between t2.date_1 and t2.date_2;
请注意,between
包含边界,因此它还会返回my_date
为2010
的行。如果您不希望您需要使用>
和<
的加入条件:
select t1.col_1, t1.col_2, t1.my_date, t2.the_value
from table_one t1
join table_two t2 on t1.my_date > t2.date_1
and t1.my_date < t2.date_2;
这也要求您的“日期”范围不重叠,否则您会得到一些奇怪的结果。
答案 1 :(得分:2)
您可以使用相关查询来获取值:
SELECT t.*,
(SELECT s.the_value FROM t2 s
WHERE t.my_date between s.date_1 and s.date_2) as the_value
FROM t1 t