# `min_by`

## Description

Returns the value of an expression associated with the minimum value of a given sort key.

- Both `sortKey` and `expression` must be comparable types (`string`, `bool`, `number`, `interval`, `timestamp`, `regexp`, or `enum`).
- Useful for retrieving details from the row that has the earliest or smallest value of another field.

## Syntax

```dataprime
min_by(sortKey: T, expression: U): U
```

## Arguments

| Name       | Type | Required | Description                                                                                         |
| ---------- | ---- | -------- | --------------------------------------------------------------------------------------------------- |
| sortKey    | T    | **true** | Field to minimize. Must be `string`, `bool`, `number`, `interval`, `timestamp`, `regexp`, or `enum` |
| expression | U    | **true** | Value to return from the row with the minimum `sortKey`. Must be a comparable type                  |

## Example

**Use case: Retrieve details of the earliest event per user**

Suppose you want to know the first activity performed by each user. You can use `min` to compute the earliest timestamp and `min_by` to extract the associated details.

### Example data

```json
{ "username": "chris", "path": "/home", "latency": 320, "ts": 1728919749261000000 },
{ "username": "chris", "path": "/checkout", "latency": 5000, "ts": 1728919759261000000 }
```

### Example query

```dataprime
groupby username aggregate min(ts) as ts, min_by(ts, path) as path
```

### Example output

| username | path  | ts                  |
| -------- | ----- | ------------------- |
| chris    | /home | 1728919749261000000 |
