[英]Select column from another table based on matching condition
我有兩個表,其中包含以下形式的時間序列數據。 我想 select TABLE1 的所有列和一個附加列Limit_At_Time
,它是具有最近日期的行的 TABLE2 的Limit
列的值(相對於 TABLE1.Date)
表格1:
Customer_ID Date Amount
1 01/01/2019 5
2 02/05/2019 15
表 2:
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 行感興趣的事件日期,但我需要提取包含該previous_date
的行的Limit
列值。
我怎樣才能達到我想要的結果?
您可以將子查詢用作table1
和table2
之間的JOIN
條件,然后您可以從table2
獲取Limit
值:
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)
Output:
Customer_ID Date Amount Limit
1 2019-01-01 5 20
2 2019-02-05 15 30
我只會使用相關的子查詢:
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;
通常在這些類型的問題中,比較是<=
而不是<
,所以我使用了它。 當然,與您的查詢完全等價的是<
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.