我以为我会立即得到这个问题的答案,但我没有找到任何Q& A,这正是我想要的。
所以,我有两张桌子。
表1:id,c_id,created_at
表2:id,c_id,b_date,s_type
我想要一个查询,它给出的输出对应于表1中的每一行。 输出应该是表1中的latest b_date in table 2 prior to created_at
,而s_type对应于最新的b_date < / strong>即可。表1和表2之间的链接条件是c_id
。这两个表都有多行包含相同的c_id
。
我的表1,表2和输出看起来像this。 我暂时不允许嵌入图片。所以请点击查看图片。
答案 0 :(得分:0)
可能是这个
SELECT T1.ID,T1.C_ID,T1.CREATED_AT,T2.B_DATE,T2.S_TYPE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.C_ID = T2.C_ID
WHERE T2.B_DATE = (SELECT MAX(T3.B_DATE) FROM TABLE2 T3 WHERE T3.b_DATE < T1.CREATED_AT AND T3.C_ID = T1.C_ID)
;
或者这个
SELECT S.ID,S.C_ID,S.CREATED_AT,S.B_DATE,T.S_TYPE
FROM
(
SELECT T1.ID,T1.C_ID,T1.CREATED_AT,T2.B_DATE,T2.S_TYPE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.C_ID = T2.C_ID
WHERE T2.B_DATE = (SELECT MAX(T3.B_DATE) FROM TABLE2 T3 WHERE T3.b_DATE < T1.CREATED_AT AND T3.C_ID = T1.C_ID)
) S
JOIN
(SELECT T1.ID,T1.C_ID,T1.CREATED_AT,T2.B_DATE,T2.S_TYPE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.C_ID = T2.C_ID
WHERE T2.B_DATE = (SELECT MAX(T3.B_DATE) FROM TABLE2 T3 WHERE T3.C_ID = T1.C_ID)
) T ON S.C_ID = T.C_ID
;