根据匹配条件从另一个表中选择列

时间:2019-11-08 00:37:00

标签: mysql sql

我有两个表,它们具有以下格式的时间序列数据。我想选择TABLE1的所有列和附加列Limit_At_Time,这是具有最新Date(相对于TABLE1.Date)的行的TABLE2的Limit列的值< / p>

TABLE1:

Customer_ID   Date         Amount
1             01/01/2019   5
2             02/05/2019   15

TABLE2:

Customer_ID   Date         Limit
1             12/05/2018   10
1             12/25/2018   20
2             01/05/2019   30
2             03/08/2019   50

结果:

Customer_ID   Date         Amount      Limit_At_Time
1             01/01/2019   5           20
2             02/05/2019   15          30

与我最近的查询是通过此查询选择一个previous_date列:

SELECT *, 
(SELECT MAX(Date) FROM TABLE2 t2
   WHERE t2.Date < t1.Date 
   AND t2.Customer_ID = t1.Customer_ID)
as previous_date
FROM TABLE1 AS t1

这使我从TABLE2中获得了每个TABLE1行感兴趣的事件的日期,但是我需要提取包含该Limit的行的previous_date列值。

如何获得想要的结果?

2 个答案:

答案 0 :(得分:1)

您可以将子查询用作JOINtable1之间的table2条件,然后可以从Limit获取table2值:< / p>

SELECT t1.Customer_ID, t1.Date, t1.Amount, t2.Limit
FROM table1 t1
JOIN table2 t2 ON t2.Customer_ID = t1.Customer_ID
              AND t2.Date = (SELECT MAX(Date) FROM table2 t2b
                             WHERE t2b.Date < t1.Date 
                             AND t2b.Customer_ID = t1.Customer_ID)

输出:

Customer_ID Date        Amount  Limit
1           2019-01-01  5       20
2           2019-02-05  15      30

Demo on dbfiddle

答案 1 :(得分:1)

我只使用相关子查询:

select t1.*,
       (select t2.limit
        from table2 t2
        where t2.date <= t1.date
        order by t2.date desc
        limit 1
       ) as Limit_At_Time
from table1 t1;

通常在这些类型的问题中,比较是<=而不是<,所以我使用了它。当然,与您的查询完全相同的是<

相关问题