---
title: first() | Tiger Data Docs
description: Get the first value in one column when rows are ordered by another column
---

Since [0.0.11-beta](https://github.com/timescale/timescaledb/releases/tag/0.0.11-beta)

The `first` aggregate allows you to get the value of one column as ordered by another. For example, `first(temperature, time)` returns the earliest temperature value based on time within an aggregate group.

The `last` and `first` commands do not use indexes, they perform a sequential scan through the group. They are primarily used for ordered selection within a `GROUP BY` aggregate, and not as an alternative to an `ORDER BY time DESC LIMIT 1` clause to find the latest value, which uses indexes.

## Samples

Get the earliest temperature by device\_id:

```
SELECT device_id, first(temp, time)
FROM metrics
GROUP BY device_id;
```

This example uses first and last with an aggregate filter, and avoids null values in the output:

```
SELECT
   TIME_BUCKET('5 MIN', time_column) AS interv,
   AVG(temperature) as avg_temp,
   first(temperature,time_column) FILTER(WHERE time_column IS NOT NULL) AS beg_temp,
   last(temperature,time_column) FILTER(WHERE time_column IS NOT NULL) AS end_temp
FROM sensors
GROUP BY interv
```

## Arguments

The syntax is:

```
SELECT first(
    value = <anyelement>,
    time = <anyelement>
);
```

| Name    | Type       | Default | Required | Description                                                                                                          |
| ------- | ---------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------------- |
| `value` | ANYELEMENT | -       | ✔        | The value to return                                                                                                  |
| `time`  | ”any”      | -       | ✔        | The timestamp to use for comparison. Accepts any comparable type such as TIMESTAMPTZ, TIMESTAMP, INTEGER, or BIGINT. |

## Returns

| Column  | Type        | Description                                                                                                                                        |
| ------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `first` | ANY ELEMENT | The value from the `value` column corresponding to the earliest `time` within the aggregate group. The return type matches the `value` input type. |
