【问题标题】:Getting values for a varying date range in Postgresql在 Postgresql 中获取不同日期范围的值
【发布时间】:2015-07-25 03:31:59
【问题描述】:

我正在尝试使用另一个表中的日期范围从一个表中获取最大值。我在 postgresql 数据库上使用 SQL。目标是获取添加到具有开始和结束日期(按年份和区域)的表的日期范围的最大值。我认为这是下面概述的两个步骤。

第一步:我希望使用 Table1 中的两列日期来创建一个范围。该表有以下几列:

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

提前感谢您的帮助。

【问题讨论】:

    标签: sql postgresql max date-range


    【解决方案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;
    

    【讨论】:

    • @GordanLinoff 非常接近。我遇到问题的另一部分是所有年份和区域组合的最大值(针对不同的日期范围)。
    • 然后在子查询中添加“and t2.area=t1.area”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多