---
title: Calculate the moving average
description: Use the movingAverage() or timedMovingAverage() functions to return the moving average of data.
url: https://docs.influxdata.com/enterprise_influxdb/v1/flux/guides/moving-average/
estimated_tokens: 859
publisher: InfluxData
canonical: https://docs.influxdata.com/enterprise_influxdb/v1/flux/guides/moving-average/
date: '2025-01-13T07:21:11-07:00'
lastmod: '2025-01-13T07:21:11-07:00'
---

Use the [`movingAverage()`](/flux/v0/stdlib/universe/movingaverage/)or [`timedMovingAverage()`](/flux/v0/stdlib/universe/timedmovingaverage/)functions to return the moving average of data.

```js
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         |
|-----|-----------------------------|
|  1  |*Insufficient number of rows*|
|  2  |*Insufficient 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:00Z|  1.0  |
|2020-01-01T00:02:00Z|  1.2  |
|2020-01-01T00:03:00Z|  1.8  |
|2020-01-01T00:04:00Z|  0.9  |
|2020-01-01T00:05:00Z|  1.4  |
|2020-01-01T00:06:00Z|  2.0  |

**The following would return:**

```js
|> movingAverage(n: 3)
```

|       \_time       |\_value|
|--------------------|-------|
|2020-01-01T00:03:00Z| 1.33  |
|2020-01-01T00:04:00Z| 1.30  |
|2020-01-01T00:05:00Z| 1.36  |
|2020-01-01T00:06:00Z| 1.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:00Z|  1.0  |
|2020-01-01T00:02:00Z|  1.2  |
|2020-01-01T00:03:00Z|  1.8  |
|2020-01-01T00:04:00Z|  0.9  |
|2020-01-01T00:05:00Z|  1.4  |
|2020-01-01T00:06:00Z|  2.0  |

**The following would return:**

```js
|> timedMovingAverage(every: 2m, period: 4m)
```

|       \_time       |\_value|
|--------------------|-------|
|2020-01-01T00:02:00Z| 1.000 |
|2020-01-01T00:04:00Z| 1.333 |
|2020-01-01T00:06:00Z| 1.325 |
|2020-01-01T00:06:00Z| 1.150 |
| Row # | Calculation |
| --- | --- |
| Row # | Calculation |
| 1 | Insufficient number of rows |
| 2 | Insufficient number of rows |
| 3 | (Row1 + Row2 + Row3) / 3 |
| 4 | (Row2 + Row3 + Row4) / 3 |
| 5 | (Row3 + Row4 + Row5) / 3 |

| _time | _value |
| --- | --- |
| _time | _value |
| 2020-01-01T00:01:00Z | 1.0 |
| 2020-01-01T00:02:00Z | 1.2 |
| 2020-01-01T00:03:00Z | 1.8 |
| 2020-01-01T00:04:00Z | 0.9 |
| 2020-01-01T00:05:00Z | 1.4 |
| 2020-01-01T00:06:00Z | 2.0 |

| _time | _value |
| --- | --- |
| _time | _value |
| 2020-01-01T00:03:00Z | 1.33 |
| 2020-01-01T00:04:00Z | 1.30 |
| 2020-01-01T00:05:00Z | 1.36 |
| 2020-01-01T00:06:00Z | 1.43 |

| _time | _value |
| --- | --- |
| _time | _value |
| 2020-01-01T00:01:00Z | 1.0 |
| 2020-01-01T00:02:00Z | 1.2 |
| 2020-01-01T00:03:00Z | 1.8 |
| 2020-01-01T00:04:00Z | 0.9 |
| 2020-01-01T00:05:00Z | 1.4 |
| 2020-01-01T00:06:00Z | 2.0 |

| _time | _value |
| --- | --- |
| _time | _value |
| 2020-01-01T00:02:00Z | 1.000 |
| 2020-01-01T00:04:00Z | 1.333 |
| 2020-01-01T00:06:00Z | 1.325 |
| 2020-01-01T00:06:00Z | 1.150 |
