簡體   English   中英

在Postgresql中獲取不同日期范圍的值

[英]Getting values for a varying date range in Postgresql

我試圖使用另一個表的日期范圍從一個表中獲取最大值。 我在postgresql數據庫上使用SQL。 目標是獲得添加到具有開始和結束日期(按年和地區)的表中的日期范圍的最大值。 我認為這是下面概述的兩個步驟。

第一步:我希望使用表1中的日期兩列來創建一個范圍。 該表包含以下列:

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

這是表1中的一些示例數據:

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

第二步:根據Table1中Date1到Date2的變化日期范圍,從Table2中提取最大值。 表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

因此,最后我想要一個經過修改的Table1,它為日期范圍添加了Max_Value(從Table2中拉出),如下所示:

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

感謝您的任何幫助。

您可以通過多種方式執行此操作。 一種方法是使用join有一個明確的聚集。 但是,由於只需要一列,因此我認為相關子查詢的編碼更簡單:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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