> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/analytics/ru/example-queries/common-queries.md).

# Частые запросы

После подключения к базе данных Вы сможете извлекать данные с помощью SQL-запросов. В этом разделе приведены примеры SQL-запросов, которые помогут Вам начать работу с Private Telematics Lakehouse. Эти примеры показывают, как получать доступ к данным и анализировать их из **Слоя Raw data** , который содержит необработанные бизнес-данные и телематические данные с минимальной трансформацией.

{% hint style="danger" %}
Обратите внимание: поскольку база данных содержит огромное количество информации, обязательно выполняйте тестовые запросы на основе ограниченного числа извлекаемых значений.
{% endhint %}

## Базовые запросы

### Получение базовой информации об объекте

Этот запрос возвращает информацию об объектах (транспортных средствах/активах) в Вашей системе:

```sql
SELECT
    o.object_id,
    o.object_label,
    o.model,
    d.device_imei,
    g.group_label
FROM
    raw_business_data.objects o
    LEFT JOIN raw_business_data.devices d ON o.device_id = d.device_id
    LEFT JOIN raw_business_data.groups g ON o.group_id = g.group_id
WHERE
    o.is_deleted = false
ORDER BY
    o.object_label;
```

### Получение последних местоположений устройств

Получите самые последние данные о местоположении для всех Ваших устройств:

```sql
SELECT
    t.device_id,
    o.object_label,
    -- Convert scaled integer coordinates back to decimal format
    t.latitude::float / 10000000 AS latitude,
    t.longitude::float / 10000000 AS longitude,
    t.speed,
    t.device_time
FROM
    raw_telematics_data.tracking_data_core t
    JOIN raw_business_data.objects o ON t.device_id = o.device_id
WHERE
    t.device_time > (CURRENT_DATE - INTERVAL '1 day')
    AND t.latitude != 0
    AND t.longitude != 0
ORDER BY
    t.device_id, t.device_time DESC;
```

{% hint style="info" %}
Значения координат хранятся как целые числа, масштабированные на 10^7, для повышения эффективности хранения в TimescaleDB. При запросе разделите значение на 10000000, чтобы преобразовать его обратно в стандартный десятичный формат.
{% endhint %}

## Объединение бизнес- и телематических данных

### Отчет об активности транспортного средства

Этот запрос формирует сводку ежедневной активности путем объединения бизнес- и телематических данных:

```sql
SELECT
    o.object_label AS vehicle,
    v.vehicle_type,
    DATE(t.device_time) AS date,
    COUNT(DISTINCT DATE_PART('hour', t.device_time)) AS active_hours,
    MAX(t.speed) AS max_speed,
    AVG(t.speed) AS avg_speed
FROM
    raw_telematics_data.tracking_data_core t
    JOIN raw_business_data.objects o ON t.device_id = o.device_id
    LEFT JOIN raw_business_data.vehicles v ON o.object_id = v.object_id
WHERE
    t.device_time BETWEEN '2025-03-01' AND '2025-03-28'
GROUP BY
    o.object_label, v.vehicle_type, DATE(t.device_time)
ORDER BY
    o.object_label, DATE(t.device_time);
```

### Назначения водителей и история местоположений

Отслеживайте, какие сотрудники были назначены на какие транспортные средства, а также их историю местоположений:

```sql
SELECT 
    o.object_label AS vehicle,
    new_row.changed_datetime AS assignment_time,
    e_new.first_name || ' ' || e_new.last_name AS new_driver_name,
    e_old.first_name || ' ' || e_old.last_name AS old_driver_name,
    new_row.address,
    new_row.latitude,
    new_row.longitude
FROM 
    raw_business_data.driver_history new_row
JOIN 
    raw_business_data.driver_history old_row
    ON new_row.changed_datetime = old_row.changed_datetime
    AND new_row.object_id = old_row.object_id
LEFT JOIN 
    raw_business_data.employees e_new ON new_row.new_employee_id = e_new.employee_id
LEFT JOIN 
    raw_business_data.employees e_old ON old_row.old_employee_id = e_old.employee_id
LEFT JOIN 
    raw_business_data.objects o ON new_row.object_id = o.object_id
ORDER BY 
    assignment_time;
```

## Анализ данных датчиков

### Отслеживание уровня топлива

Этот запрос показывает, как анализировать данные датчика топлива:

```sql
SELECT
    o.object_label AS vehicle,
    t.device_time,
    i.value::numeric AS fuel_level
FROM
    raw_telematics_data.inputs i
    JOIN raw_business_data.objects o ON i.device_id = o.device_id
    JOIN raw_telematics_data.tracking_data_core t ON
        i.device_id = t.device_id AND
        i.device_time = t.device_time
WHERE
    i.sensor_name = 'fuel'
    AND t.device_time > (CURRENT_DATE - INTERVAL '7 days')
ORDER BY
    o.object_label, t.device_time;
```

## Геопространственный анализ

### Транспортные средства в геозонах

Определите, какие транспортные средства въезжали в конкретные геозоны:

```sql
SELECT
    o.object_label AS vehicle,
    z.zone_label AS geozone,
    t.device_time AS entry_time
FROM
    raw_telematics_data.tracking_data_core t
    JOIN raw_business_data.objects o ON t.device_id = o.device_id
    JOIN raw_business_data.zones z ON
        -- Calculate if point is within circular zone
        -- Convert coordinates from scaled integers to decimal
        (
            CASE
                WHEN z.zone_type = 'circle' THEN
                    ST_DWithin(
                        ST_MakePoint(t.longitude::float/10000000, t.latitude::float/10000000)::geography,
                        ST_MakePoint(z.circle_center_longitude, z.circle_center_latitude)::geography,
                        z.radius
                    )
                ELSE false
            END
        )
WHERE
    t.device_time > (CURRENT_DATE - INTERVAL '1 day')
ORDER BY
    z.zone_label, o.object_label, t.device_time;
```

{% hint style="info" %}
Этот запрос использует пространственные функции PostGIS. Если Вы столкнетесь с ошибками, проверьте, что расширение PostGIS включено в Вашей базе данных.
{% endhint %}

## Советы по оптимизации производительности

При работе с Cloud Data Warehouse рассмотрите следующие методы оптимизации:

1. **Используйте фильтрацию по времени**: Всегда добавляйте временной фильтр к `device_time` или `record_added_at` столбцам, чтобы ограничить объем сканируемых данных.\
   **Хорошая практика**:

```sql
SELECT * FROM raw_telematics_data.tracking_data_core 
WHERE device_time > (CURRENT_DATE - INTERVAL '7 days');
```

**Избегайте этого** (сканирует всю таблицу)

```sql
SELECT * FROM raw_telematics_data.tracking_data_core;
```

2. **Используйте индексы**: В базе данных есть индексы по `(device_id, device_time)` парам. Структурируйте запросы так, чтобы по возможности использовать эти индексы.
3. **Используйте соединения выборочно**: Объединяйте таблицы только при необходимости и старайтесь фильтровать данные до объединения больших таблиц.
4. **Преобразование целых координат**: Помните, что данные координат хранятся как масштабированные целые числа. Выполняйте преобразование только в финальном SELECT, а не в условиях WHERE.
5. **Ограничивайте наборы результатов**: Всегда используйте LIMIT для исследовательских запросов, чтобы избежать возврата миллионов строк.

```sql
SELECT * FROM raw_telematics_data.tracking_data_core 
WHERE device_time > (CURRENT_DATE - INTERVAL '1 day')
LIMIT 1000;
```

6. **Используйте иерархические связи**: Структурируйте сложные запросы, следуя иерархии сущностей (**dealer → client → user/device → object**) для более эффективных соединений и фильтрации.
7. **Корректно управляйте соединениями**: Закрывайте соединения с базой данных, когда они не используются, особенно в BI-инструментах или запланированных скриптах, чтобы избежать блокировки ресурсов или проблем с тайм-аутом.

## Обработка потоковых данных не поддерживается.

Эти примеры служат отправной точкой для работы с Вашими данными. По мере того как Вы лучше познакомитесь со схемой, Вы сможете разрабатывать более сложные запросы для решения Ваших конкретных бизнес-задач.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://navixy.com/docs/analytics/ru/example-queries/common-queries.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
