> 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/pt-br/example-queries/common-queries.md).

# Consultas comuns

Padrões de SQL de exemplo para informações de Objeto, localizações de dispositivo, atividade do veículo, atribuições de Motorista, dados de sensor e análise de zonas geoespaciais

À medida que você se conecta ao banco de dados, você poderá recuperar dados por meio de consultas SQL. Esta seção fornece consultas SQL de exemplo para ajudar você a começar a trabalhar com o Private Telematics Lakehouse. Estes exemplos demonstram como acessar e analisar dados do **Dados brutos** camada, que contém dados brutos de negócios e telemáticos com transformação mínima.

{% hint style="danger" %}
Observe: Devido ao banco de dados conter uma enorme quantidade de informações, certifique-se de fazer consultas de teste com base em um número limitado de valores recuperados.
{% endhint %}

## Consultas básicas

### Recupere informações básicas do Objeto

Esta consulta retorna informações sobre objetos (Veículos/ativos) em seu sistema:

```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;
```

### Obtenha as últimas localizações dos dispositivos

Recupere os dados de localização mais recentes de todos os seus dispositivos:

```sql
SELECT
    t.device_id,
    o.object_label,
    -- Converta as coordenadas inteiras escaladas de volta para o formato decimal
    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" %}
Os valores de coordenadas são armazenados como inteiros escalados por 10^7 para melhorar a eficiência de armazenamento no TimescaleDB. Ao consultar, divida por 10000000 para converter de volta para o formato decimal padrão.
{% endhint %}

## Unindo dados de negócios e telemáticos

### Relatório de atividade do veículo

Esta consulta gera um resumo diário de atividade ao combinar dados de negócios e telemáticos:

```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'
AGRUPAR POR
    o.object_label, v.vehicle_type, DATE(t.device_time)
ORDER BY
    o.object_label, DATE(t.device_time);
```

### Atribuições do Motorista e histórico de localização

Acompanhe quais funcionários foram atribuídos a quais Veículos e seu histórico de localização:

```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 nova_linha
JOIN 
    raw_business_data.driver_history linha_antiga
    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;
```

## Analisando dados do sensor

### Monitor de nível de Combustível

Esta consulta mostra como analisar dados do sensor de combustível:

```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 = 'Combustível'
    AND t.device_time > (CURRENT_DATE - INTERVAL '7 days')
ORDER BY
    o.object_label, t.device_time;
```

## Análise geoespacial

### Veículos em geozonas

Identifique quais Veículos entraram em geozonas específicas:

```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
        -- Calcule se o ponto está dentro da zona circular
        -- Converta coordenadas de inteiros escalonados para 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" %}
Esta consulta usa funções espaciais do PostGIS. Se você encontrar erros, verifique se a extensão PostGIS está habilitada em seu banco de dados.
{% endhint %}

## Dicas de otimização de desempenho

Ao trabalhar com o Data Warehouse na nuvem, considere estas técnicas de otimização:

1. **Usar filtragem baseada em tempo**: Sempre inclua um filtro de tempo em `device_time` ou `record_added_at` colunas para limitar os dados lidos.\
   **Boa prática**:

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

**Evite isto** (varre a tabela inteira)

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

2. **Aproveitar índices**: A base de dados tem índices em `(device_id, device_time)` pares. Estruture suas consultas para usar esses índices quando possível.
3. **Use joins seletivamente**: Junte tabelas apenas quando necessário e tente filtrar os dados antes de juntar tabelas grandes.
4. **Conversão de inteiros escalados**: Lembre-se de que os dados de coordenadas são armazenados como inteiros escalados. Converta apenas no SELECT final, não nas cláusulas WHERE.
5. **Limitar conjuntos de resultados**: Sempre use LIMIT para consultas exploratórias para evitar retornar milhões de linhas.

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

6. **Utilizar relacionamentos hierárquicos**: Estruture consultas complexas seguindo a hierarquia de entidades (**dealer → client → user/device → Objeto**) para joins e filtragem mais eficientes.
7. **Gerenciar conexões corretamente**: Feche as conexões com o banco de dados quando não estiverem em uso, especialmente em ferramentas de BI ou scripts agendados, para evitar bloqueio de recursos ou problemas de tempo limite.

## Próximas etapas

Estes exemplos fornecem um ponto de partida para trabalhar com seus dados. À medida que você se familiariza mais com o schema, pode desenvolver consultas mais complexas para atender às suas necessidades de negócio específicas.


---

# 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/pt-br/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.
