Documentation

Calculate the moving average

Use the movingAverage() or timedMovingAverage() functions to return the moving average of data.

data
    |> movingAverage(n: 5)

// OR

data
    |> timedMovingAverage(every: 5m, period: 10m)

movingAverage()

For each row in a table, movingAverage() returns the average of the current value and previous values where n is the total number of values used to calculate the average.

If n = 3:

Row #Calculation
1Insufficient number of rows
2Insufficient number of rows
3(Row1 + Row2 + Row3) / 3
4(Row2 + Row3 + Row4) / 3
5(Row3 + Row4 + Row5) / 3

Given the following input:

_time_value
2020-01-01T00:01:00Z1.0
2020-01-01T00:02:00Z1.2
2020-01-01T00:03:00Z1.8
2020-01-01T00:04:00Z0.9
2020-01-01T00:05:00Z1.4
2020-01-01T00:06:00Z2.0

The following would return:

|> movingAverage(n: 3)
_time_value
2020-01-01T00:03:00Z1.33
2020-01-01T00:04:00Z1.30
2020-01-01T00:05:00Z1.36
2020-01-01T00:06:00Z1.43

timedMovingAverage()

For each row in a table, timedMovingAverage() returns the average of the current value and all row values in the previous period (duration). It returns moving averages at a frequency defined by the every parameter.

Each color in the diagram below represents a period of time used to calculate an average and the time a point representing the average is returned. If every = 30m and period = 1h:

0:000:301:001:302:002:303:003:002:302:001:301:000:30

Given the following input:

_time_value
2020-01-01T00:01:00Z1.0
2020-01-01T00:02:00Z1.2
2020-01-01T00:03:00Z1.8
2020-01-01T00:04:00Z0.9
2020-01-01T00:05:00Z1.4
2020-01-01T00:06:00Z2.0

The following would return:

|> timedMovingAverage(every: 2m, period: 4m)
_time_value
2020-01-01T00:02:00Z1.000
2020-01-01T00:04:00Z1.333
2020-01-01T00:06:00Z1.325
2020-01-01T00:06:00Z1.150

Was this page helpful?

Thank you for your feedback!


New in InfluxDB 3.6

Key enhancements in InfluxDB 3.6 and the InfluxDB 3 Explorer 1.4.

See the Blog Post

InfluxDB 3.6 is now available for both Core and Enterprise. This release introduces the 1.4 update to InfluxDB 3 Explorer, featuring the beta launch of Ask AI, along with new capabilities for simple startup and expanded functionality in the Processing Engine.

For more information, check out:

InfluxDB Docker latest tag changing to InfluxDB 3 Core

On February 3, 2026, the latest tag for InfluxDB Docker images will point to InfluxDB 3 Core. To avoid unexpected upgrades, use specific version tags in your Docker deployments.

If using Docker to install and run InfluxDB, the latest tag will point to InfluxDB 3 Core. To avoid unexpected upgrades, use specific version tags in your Docker deployments. For example, if using Docker to run InfluxDB v2, replace the latest version tag with a specific version tag in your Docker pull command–for example:

docker pull influxdb:2