sql >> Database >  >> RDS >> PostgreSQL

Geaggregeerde waarden over een bereik van uren, elk uur

Een vensterfunctie met een aangepaste kader maakt dit verbazingwekkend eenvoudig :

SELECT ts
      ,avg(val) OVER (ORDER BY ts
                      ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
FROM tbl;

Live demo op sqlfiddle.

Het frame voor elk gemiddelde is de huidige rij plus de volgende 7. Dit veronderstelt dat je precies één rij hebt voor elk uur. Je voorbeeldgegevens lijken dat te suggereren, maar je hebt het niet gespecificeerd.

Zoals het is, avg_8h voor de finale (volgens ts ) 7 rijen van de set worden berekend met minder rijen, totdat de waarde van de laatste rij gelijk is aan zijn eigen gemiddelde. U heeft niet aangegeven hoe u met het speciale geval moet omgaan.



  1. Roep Oracle opgeslagen procedure met VBA met behulp van een refcursor

  2. Back-up / export van een database vanuit SSH

  3. psycopg2.OperationalError:FATAL:niet-ondersteund frontend-protocol 1234.5679:server ondersteunt 2.0 tot 3.0

  4. Hoe kan ik een back-up maken van een externe SQL Server-database naar een lokale schijf?