在 Postgresql 中获取不同日期范围的值
Getting values for a varying date range in Postgresql
我正在尝试使用另一个 table 的日期范围从一个 table 中获取最大值。我在 postgresql 数据库上使用 SQL。目标是获取添加到具有开始和结束日期(按年份和区域)的 table 的日期范围的最大值。我将其视为下面概述的两个步骤。
第一步:我希望使用表 1 中的两列日期来创建一个范围。 table 有以下列:
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,为日期范围(从 Table2 中提取)添加 Max_Value,如下所示:
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;
我正在尝试使用另一个 table 的日期范围从一个 table 中获取最大值。我在 postgresql 数据库上使用 SQL。目标是获取添加到具有开始和结束日期(按年份和区域)的 table 的日期范围的最大值。我将其视为下面概述的两个步骤。
第一步:我希望使用表 1 中的两列日期来创建一个范围。 table 有以下列:
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,为日期范围(从 Table2 中提取)添加 Max_Value,如下所示:
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;