如何查找与不同表中每行对应的表中的最新行?

时间:2016-09-04 17:05:16

标签: mysql

我以为我会立即得到这个问题的答案,但我没有找到任何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。 我暂时不允许嵌入图片。所以请点击查看图片。

1 个答案:

答案 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
;