> 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-запросов. В этом разделе приведены примеры SQL-запросов, которые помогут вам начать работу с Private Telematics Lakehouse. Эти примеры показывают, как получить доступ к данным из **Сырые данные** слой, который содержит необработанные бизнес-данные и телематические данные с минимальной трансформацией.

{% 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,
    -- Преобразуйте масштабированные целочисленные координаты обратно в десятичный формат
    t.latitude::float / 10000000 AS latitude,
    t.longitude::float / 10000000 AS longitude,
    t.speed,
    t.device_time
FROM
    raw_telematics_data.Мониторинг_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.Мониторинг_data_core t
    JOIN raw_business_data.objects o ON t.device_id = o.device_id
    LEFT JOIN raw_business_data.Транспорт v ON o.object_id = v.object_id
WHERE
    t.device_time BETWEEN '2025-03-01' AND '2025-03-28'
ГРУППА ПО
    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 старая строка
    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
    ОБЪЕДИНИТЬ 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.Мониторинг_data_core t
    JOIN raw_business_data.objects o ON t.device_id = o.device_id
    JOIN raw_business_data.zones z ON
        -- Рассчитайте, находится ли точка внутри круговой зоны
        -- Преобразуйте координаты из масштабированных целых чисел в десятичные
        (
            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 %}

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

При работе с облачным хранилищем данных рассмотрите следующие методы оптимизации:

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

```sql
SELECT * FROM raw_telematics_data.Мониторинг_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. **Используйте JOIN'ы выборочно**: Соединяйте таблицы только при необходимости и старайтесь фильтровать данные перед соединением больших таблиц.
4. **Преобразование масштабированных целых чисел**: Помните, что координатные данные хранятся как масштабированные целые числа. Преобразуйте их только в финальном SELECT, а не в предложениях WHERE.
5. **Ограничение наборов результатов**: Всегда используйте LIMIT для исследовательских запросов, чтобы не возвращать миллионы строк.

```sql
SELECT * FROM raw_telematics_data.Мониторинг_data_core 
WHERE device_time > (CURRENT_DATE - INTERVAL '1 day')
LIMIT 1000;
```

6. **Использование иерархических связей**: Стройте сложные запросы, следуя иерархии сущностей (**dealer → client → user/device → Объект**) для более эффективных соединений и фильтрации.
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.
