选择特定日期的平均值

问题描述 投票:0回答:1

我有这张表'meteorecords',上面有日期,温度,rh和进行记录的气象站。

    rerowid    date       temp    rh     meteostid
    1       2019-09-9     28.8    55.6    AITNIA2
    2       2019-09-10    30.3    51.3    AITNIA2
    3       2019-09-11    28.6    49.0    AITNIA2
    4       2019-09-12    26.7    51.9    AITNIA2
    5       2019-09-13    25.3    48.1    AITNIA2
    6       2019-09-14    25.3    38.5    AITNIA2
    7       2019-09-15    25.0    42.2    AITNIA2
    8       2019-09-16    24.1    52.1    AITNIA2
    9       2019-09-17    23.3    65.2    AITNIA2
    10      2019-09-18    22.7    72.2    AITNIA2
    11      2019-09-19    23.4    73.9    AITNIA2
    12      2019-09-20    23.1    76.7    AITNIA2
    13      2019-09-21    22.5    60.3    AITNIA2
    14      2019-09-22    20.9    61.6    AITNIA2
    15      2019-09-23    21.9    73.9    AITNIA2
    16      2019-09-24    23.2    79.6    AITNIA2
    17      2019-09-25    21.8    73.6    AITNIA2
    18      2019-09-26    22.2    77.6    AITNIA2
    19      2019-09-27    22.9    77.1    AITNIA2
    20      2019-09-28    22.8    68.4    AITNIA2
    21      2019-09-29    22.6    75.5    AITNIA2
               ...........................

我要选择所有字段以及最近三天的平均温度。

我正在使用postgresql,因为我在数据库中有一些几何和空间数据。我没有运气尝试过:

    SELECT rerowid,redate,retemp,rerh,meteostid,
      (SELECT AVG(retemp) 
       FROM meteorecords m 
       WHERE meteostid = m.meteostid AND m.redate BETWEEN redate-2 AND redate)
     FROM meteorecords

它返回这样的结果:

    rerowid   date         temp    rh      meteostid   AVG_Last_3_Days
      1       2019-09-09   28.8    55.6    AITNIA2     22.2824
      2       2019-09-10   30.3    51.3    AITNIA2     22.2824 
      3       2019-09-11   28.6    49.0    AITNIA2     22.2824
      4       2019-09-12   26.7    51.9    AITNIA2     22.2824
      5       2019-09-13   25.3    48.1    AITNIA2     22.2824
      6       2019-09-14   25.3    38.5    AITNIA2     22.2824
      7       2019-09-15   25.1    42.2    AITNIA2     22.2824
                      .................. 

但是我想要这样的结果:

    rerowid   date         temp    rh      meteostid   AVG_Last_3_Days
      1       2019-09-09   28.8    55.6    AITNIA2     28.8
      2       2019-09-10   30.3    51.3    AITNIA2     29.5 
      3       2019-09-11   28.6    49.0    AITNIA2     29.2
      4       2019-09-12   26.7    51.9    AITNIA2     28.5
      5       2019-09-13   25.3    48.1    AITNIA2     26.9
      6       2019-09-14   25.3    38.5    AITNIA2     25.8
      7       2019-09-15   25.1    42.2    AITNIA2     25.2
                      .................. 
sql database postgresql average
1个回答
0
投票

使用窗口功能。如果每个日期有一行,或者您想在数据中*前三个日期):

SELECT rerowid, redate, retemp, rerh, meteostid,
       AVG(retemp) OVER (PARTITION BY meteostid ORDER BY redate ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as avg_retemp_3
 FROM meteorecords;
© www.soinside.com 2019 - 2024. All rights reserved.