Redshift:如何根据条件使用不同的密钥加入

问题描述 投票:0回答:1

我有两个表(

t1
t2
)要根据 id 和年份月份加入
YYYY-MM

一般来说,连接是这样的,例如:

SELECT t1.id, t1.month, t2.price
FROM t1
JOIN t2
ON t1.id = t2.id AND t1.year_month = t2.year_month

现在,对于一个特定的

t1.id
,例如
t1.id = 'a'
,我需要加入上个月的
t2

SELECT t1.id, t1.month, t2.price
FROM t1
JOIN t2
ON t1.id = t2.id 
AND (t1.year_month = t2.year_month if t1.id != 'a' 
     else t1.year_month = t2.year_month - 1 month)

我认为要做的是创建一个临时表,

t2
的年月为
id = 'a'
增加一个月。但是
t2
是一张非常大的桌子,所以我真的不想走这条路线。

实现这一目标的最佳方法是什么?谢谢!

sql amazon-web-services amazon-redshift
1个回答
0
投票

基于@JohnRotenstein,我尝试在

CASE
子句中使用
JOIN
语句,并且它起作用了。

这里有一个示例代码,供任何因同一问题来到这里的人使用。

SELECT t1.id, t1.month, t2.price
FROM t1
JOIN t2
ON t1.id = t2.id 
AND t1.year_month = (
    CASE 
    WHEN t1.id = 'a' THEN t2.year_month - 1 month
    ELSE t2.year_month
    END
)
    
© www.soinside.com 2019 - 2024. All rights reserved.