2015-05-13 46 views
1

我正在嘗試使用另一個表中的日期範圍從一個表中獲取最大值。我在postgresql數據庫上使用SQL。目標是獲取添加到具有開始日期和結束日期的表格(按年份和區域)的日期範圍的最大值。我將其看作下面列出的兩個步驟。在Postgresql中獲取不同日期範圍的值

第一步:我正在尋找使用Table1中的兩個日期列來創建一個範圍。從表1

ID (integer(11)) 
Date1 (varchar(10)) 
Date2 (varchar(10)) 
Year (integer) 
Area (varchar) 

下面是一些示例數據:表中有這些列

ID Date1  Date2  Year Area 
101 8/21/2000 11/20/2000 2000 5 
102 7/31/2000 10/30/2000 2000 5 
103 7/10/2000 10/9/2000 2000 6 
104 7/10/2000 10/9/2000 2000 6 
105 7/4/2000 10/3/2000 2000 6 
106 7/10/2000 10/9/2000 2000 6 
107 7/31/2000 10/30/2000 2000 7 
108 7/31/2000 10/30/2000 2000 7 

第二步:上拉從表2基於該變化的時間範圍從日期1到日期2在表1的最大值。表2具有這些值:

Date (varchar(12)) 
Area (varchar(11)) 
Value (varchar(6)) 

下面是一些(非常有限的)樣品的數據從表2:

Date  Area Value 
8/2/2000 5 72.1 
8/25/2000 5 68.4 
9/14/2000 5 53.3 
7/5/2000 6 47.9 
8/1/2000 6 10.2 
9/30/2000 6 11.6 
8/5/2000 7 35.2 
9/1/2000 7 45.4 

所以最終我想修改的表1,其將所述MAX_VALUE的日期範圍(從表2中拉出),看起來像這樣:

ID Date1  Date2  Year Area Max_Value 
101 8/21/2000 11/20/2000 2000 5  68.4 
102 7/31/2000 10/30/2000 2000 5  72.1 
103 7/10/2000 10/9/2000 2000 6  11.6 
104 7/10/2000 10/9/2000 2000 6  11.6 
105 7/4/2000 10/3/2000 2000 6  47.9 
106 7/10/2000 10/9/2000 2000 6  11.6 
107 7/31/2000 10/30/2000 2000 7  45.4 
108 7/31/2000 10/30/2000 2000 7  45.4 

感謝您的任何幫助提前。

回答

1

您可以通過多種方式來實現。一種方法將使用join與明確的聚合。但是,因爲你只需要一列,我認爲相關子查詢是簡單的代碼:

select t1.*, 
     (select max(t2.value) 
     from table2 t2 
     where t2.date between t1.date1 and t1.date2 
     ) as maxvalue 
from table1 t1; 
+0

@GordanLinoff非常接近。我遇到問題的另一部分是所有年份和地區組合的最大值(針對不同的日期範圍)。 – Sasha

+1

然後在子查詢中添加「和t2.area = t1.area」。 – Tim3880