# Query Process Runs

Process-run queries support process-template filters, typed parameter filters, relationship inclusion, visibility, ordering, and pagination.


# Filter process templates

Use [filter()](../../reference/BaseQuery.md#recap.BaseQuery.filter) for query fields and [Field](../../reference/Field.md#recap.Field) predicates for portable structured comparisons.

``` python
from recap.dsl.query import Field

runs = (
    namespace.query_maker()
    .process_runs()
    .where(Field("process_template.name") == "Collect")
    .where(Field("name").starts_with("Run-"))
    .all()
)
```


# Filter parameters

[filter_parameter()](../../reference/ProcessRunQuery.md#recap.ProcessRunQuery.filter_parameter) requires exactly one comparator. Use `eq`, range comparators, `between`, or membership with [in_](../../reference/Field.md#recap.Field.in_); pass `step` when parameter names repeat across steps.

``` python
query = namespace.query_maker()

exact = query.process_runs().filter_parameter(
    "detector", eq="pilatus", step="Collect"
).all()

in_range = query.process_runs().filter_parameter(
    "exposure", between=(0.1, 1.0), step="Collect"
).all()

selected = query.process_runs().filter_parameter(
    "energy", in_=[8.0, 12.0, 16.0], value_type="float"
).all()
```


# Include run relationships

``` python
runs = (
    query.process_runs()
    .include_steps(include_parameters=True)
    .include_resources()
    .all()
)
```

[include_steps()](../../reference/ProcessRunQuery.md#recap.ProcessRunQuery.include_steps) loads steps; `include_steps(include_parameters=True)` also loads step parameters; [include_resources()](../../reference/ProcessRunQuery.md#recap.ProcessRunQuery.include_resources) loads assigned resources and their child resources.


# Include archived runs and paginate

``` python
runs = (
    query.process_runs()
    .include_archived()
    .order_by(Field("create_date").desc())
    .limit(25)
    .offset(50)
    .all()
)
```

Archived runs are excluded by default. [first()](../../reference/BaseQuery.md#recap.BaseQuery.first) is equivalent to applying `limit(1)` and returning the first result.
