我有这样的表A
:
id |stuff| p_year | profit
---|-----|--------|-------
1 | 1 | 2000 | 12
1 | 2 | 2005 | 15
2 | 1 | 2002 | 14
2 | 2 | 2001 | 16
和表格B
是这样的:
stuff|p_year| category
-----|------|---------
1 | 2001 | 1
1 | 2008 | 2
2 | 2002 | 1
2 | 2009 | 2
现在,我想基于stuff
列以及表p_year
的最大A
小于表B
加入这些表。
例如,在加入后我们有:
id|stuff|p_year_A|p_year_B|category|profit
--|-----|--------|--------|--------|------
1 | 1 | 2000 |2001 | 1 | 12
1 | 2 | 2005 | 2009 | 2 | 15
2 | 1 | 2002 | 2008 | 2 | 14
2 | 2 | 2001 | 2002 | 1 | 16
如何使用sql查询执行此操作?
答案 0 :(得分:2)
您的问题非常适合横向连接。但是,并非所有数据库都支持此类连接。
如果没有,你可以定期加入:
select a.*, b.*
from a join
b
on a.stuff = b.stuff
where b.year = (select max(b2.year)
from b
where b2.stuff = a.stuff and b2.year < a.year
);
在SQL Server中,您可以这样做:
select a.*, b.*
from a outer apply
(select top 1 b.*
from b
where b.stuff = a.stuff and b.year < a.year
order by b.year desc
) b;
答案 1 :(得分:1)
我不知道这是否有效。但这将是我的第一次尝试。
仅当p_year_B总是大于p_year_A。
SELECT * FROM A, B WHERE p_year_B=(SELECT p_year_B FROM B WHERE p_year_A < p_year_B ORDER BY p_year_B DESC LIMIT 1);
当然你必须调整它;)