---
title: Calculate the moving average
description: Use movingAverage() or timedMovingAverage() to return the moving average of data.
url: https://docs.influxdata.com/influxdb/v2/query-data/flux/moving-average/
estimated_tokens: 3026
product: InfluxDB OSS v2
version: v2
---

# Calculate the moving average

This page documents an earlier version of InfluxDB OSS. [InfluxDB 3 Core](/influxdb3/core/) is the latest stable version.

#### API token hashing is enabled by default in InfluxDB OSS 2.9.0

Stronger token security: tokens are stored as hashes on disk, so a copy of the database file doesn’t expose usable tokens. Existing tokens are hashed on first startup and the original strings can’t be recovered afterward — **capture any plaintext tokens you still need before you upgrade**.

For more information, see [Token hashing](/influxdb/v2/admin/tokens/#token-hashing).

Use [`movingAverage()`](/flux/v0/stdlib/universe/movingaverage/) or [`timedMovingAverage()`](/flux/v0/stdlib/universe/timedmovingaverage/) 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:00:00Z | 1.0 |
| 2020-01-01T00:30:00Z | 1.2 |
| 2020-01-01T01:00:00Z | 1.8 |
| 2020-01-01T01:30:00Z | 0.9 |
| 2020-01-01T02:00:00Z | 1.4 |
| 2020-01-01T02:30:00Z | 2.0 |
| 2020-01-01T03:00:00Z | 1.9 |

**The following would return:**

```js
|> timedMovingAverage(every: 30m, period: 1h)
```

| _time | _value |
| --- | --- |
| 2020-01-01T00:30:00Z | 1.0 |
| 2020-01-01T01:00:00Z | 1.1 |
| 2020-01-01T01:30:00Z | 1.5 |
| 2020-01-01T02:00:00Z | 1.35 |
| 2020-01-01T02:30:00Z | 1.15 |
| 2020-01-01T03:00:00Z | 1.7 |
| 2020-01-01T03:00:00Z | 2 |

#### Related

-   [movingAverage() function](/flux/v0/stdlib/universe/movingaverage/)
-   [timedMovingAverage() function](/flux/v0/stdlib/universe/timedmovingaverage/)

[query](/influxdb/v2/tags/query/) [moving average](/influxdb/v2/tags/moving-average/)
