我有两个表,它们具有以下格式的时间序列数据。我想选择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
列值。
如何获得想要的结果?
答案 0 :(得分:1)
您可以将子查询用作JOIN
和table1
之间的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
答案 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;
通常在这些类型的问题中,比较是<=
而不是<
,所以我使用了它。当然,与您的查询完全相同的是<
。