Documentation

SQL selector functions

SQL selector functions are designed to work with time series data. They behave similarly to aggregate functions in that they take a collection of data and return a single value. However, selectors are unique in that they return a struct that contains a time value in addition to the computed value.

How do selector functions work?

Each selector function returns an Arrow struct (similar to a JSON object) representing a single time and value from the specified column in the each group. What time and value get returned depend on the logic in the selector function. For example, selector_first returns the value of specified column in the first row of the group. selector_max returns the maximum value of the specified column in the group.

Selector struct schema

The struct returned from a selector function has two properties:

  • time: time value in the selected row
  • value: value of the specified column in the selected row
{time: 2023-01-01T00:00:00Z, value: 72.1}

Selector functions in use

In your SELECT statement, execute a selector function and use bracket notation to reference properties of the returned struct to populate the column value:

SELECT
  selector_first(temp, time)['time'] AS time,
  selector_first(temp, time)['value'] AS temp,
  room
FROM home
GROUP BY room

Selector functions

selector_min

Returns the smallest value of a selected column and a timestamp.

selector_min(expression, timestamp)

Arguments

  • expression: Expression to operate on. Can be a constant, column, or function, and any combination of string or arithmetic operators.
  • timestamp: Time expression. Can be a constant, column, or function.

View selector_min query example

selector_max

Returns the largest value of a selected column and a timestamp.

selector_max(expression, timestamp)

Arguments

  • expression: Expression to operate on. Can be a constant, column, or function, and any combination of string or arithmetic operators.
  • timestamp: Time expression. Can be a constant, column, or function.

View selector_max query example

selector_first

Returns the first value ordered by time ascending.

selector_first(expression, timestamp)

Arguments

  • expression: Expression to operate on. Can be a constant, column, or function, and any combination of string or arithmetic operators.
  • timestamp: Time expression. Can be a constant, column, or function.

View selector_first query example

selector_last

Returns the last value ordered by time ascending.

selector_last(expression, timestamp)

Arguments

  • expression: Expression to operate on. Can be a constant, column, or function, and any combination of string or arithmetic operators.
  • timestamp: Time expression. Can be a constant, column, or function.

View selector_last query example


Was this page helpful?

Thank you for your feedback!


New in InfluxDB 3.7

Key enhancements in InfluxDB 3.7 and the InfluxDB 3 Explorer 1.5.

See the Blog Post

InfluxDB 3.7 is now available for both Core and Enterprise, landing alongside version 1.5 of the InfluxDB 3 Explorer UI. This release focuses on giving developers faster visibility into what their system is doing with one-click monitoring, a streamlined installation pathway, and broader updates that simplify day-to-day operations.

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

InfluxDB Cloud Serverless