PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Множество средни стойности на равномерно разпределени интервали

Предлагам удобната функция width_bucket() :

За да получите средната стойност за всеки времеви сегмент ("bin"):

SELECT width_bucket(extract(epoch FROM t.the_date)
                  , x.min_epoch, x.max_epoch, x.bins) AS bin
     , avg(value) AS bin_avg
FROM   tbl t
    , (SELECT extract(epoch FROM min(the_date)) AS min_epoch
            , extract(epoch FROM max(the_date)) AS max_epoch
            , 10 AS bins
       FROM   tbl t
      ) x
GROUP  BY 1;

За да получите „текущата средна стойност“ за (стъпка по стъпка) нарастващ интервал от време:

SELECT bin, round(sum(bin_sum) OVER w /sum(bin_ct) OVER w, 2) AS running_avg
FROM  (
   SELECT width_bucket(extract(epoch FROM t.the_date)
                     , x.min_epoch, x.max_epoch, x.bins) AS bin
        , sum(value) AS bin_sum
        , count(*)   AS bin_ct
   FROM   tbl t
       , (SELECT extract(epoch FROM min(the_date)) AS min_epoch
               , extract(epoch FROM max(the_date)) AS max_epoch
               , 10 AS bins
          FROM   tbl t
         ) x
   GROUP  BY 1
   ) sub
WINDOW w AS (ORDER BY bin)
ORDER  BY 1;

Използване на the_date вместо дата като име на колона, като се избягват запазени думи като идентификатори.
От width_bucket() в момента се прилага само за двойна точност и числови , извличам стойности на епоха от the_date . Подробности тук:
Агрегиране на (x,y) координатни облаци от точки в PostgreSQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да възстановите непоследователен PostgreSQL Slave

  2. Съвети за най-добри практики за PostgreSQL VACUUM and ANALYZE

  3. LOWER LIKE срещу iLIKE

  4. Как да конвертирате FeatureCollection в GeometryCollection или MultiPolygon?

  5. Използване на функцията на Levenshtein за всеки елемент в tsvector?