簡體   English   中英

基於匹配條件的另一個表中的 Select 列

[英]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列值。

我怎樣才能達到我想要的結果?

您可以將子查詢用作table1table2之間的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

dbfiddle 上的演示

我只會使用相關的子查詢:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM