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

# Kueri umum

Pola SQL contoh untuk informasi pelacak, lokasi perangkat, aktivitas kendaraan, penugasan supir, data sensor, dan analisis zona geospasial

Saat Anda terhubung ke database, Anda akan dapat mengambil data melalui kueri SQL. Bagian ini menyediakan contoh kueri SQL untuk membantu Anda mulai bekerja dengan Private Telematics Lakehouse. Contoh-contoh ini menunjukkan cara mengakses dan menganalisis data dari **Data mentah** lapisan, yang berisi data bisnis dan telematik mentah dengan transformasi minimal.

{% hint style="danger" %}
Harap diperhatikan: Karena basis data berisi sejumlah besar informasi, pastikan untuk menjalankan kueri uji berdasarkan jumlah nilai yang diambil yang terbatas.
{% endhint %}

## Kueri dasar

### Ambil informasi dasar pelacak

Kueri ini menampilkan informasi tentang objek (Kendaraan/aset) di sistem Anda:

```sql
SELECT
    o.pelacak_id,
    o.label objek,
    o.model,
    d.device_imei,
    g.group_label
DARI
    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;
```

### Dapatkan lokasi perangkat terbaru

Ambil data lokasi terbaru untuk semua perangkat Anda:

```sql
SELECT
    t.device_id,
    o.label objek,
    -- Konversikan koordinat bilangan bulat yang diskalakan kembali ke format desimal
    t.latitude::float / 10000000 AS latitude,
    t.longitude::float / 10000000 AS longitude,
    t.speed,
    t.device_time
DARI
    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" %}
Nilai koordinat disimpan sebagai bilangan bulat yang diskalakan dengan 10^7 untuk meningkatkan efisiensi penyimpanan di TimescaleDB. Saat melakukan kueri, bagi dengan 10000000 untuk mengonversinya kembali ke format desimal standar.
{% endhint %}

## Menggabungkan data bisnis dan telematika

### Laporan aktivitas kendaraan

Query ini menghasilkan ringkasan aktivitas harian dengan menggabungkan data bisnis dan data telematik:

```sql
SELECT
    o.object_label AS kendaraan,
    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
DARI
    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'
Kelompok berdasarkan
    o.object_label, v.vehicle_type, DATE(t.device_time)
ORDER BY
    o.object_label, DATE(t.device_time);
```

### Penugasan supir dan riwayat lokasi

Lacak karyawan mana yang ditugaskan ke Kendaraan mana dan riwayat lokasi mereka:

```sql
SELECT 
    o.object_label AS kendaraan,
    new_row.changed_datetime AS assignment_time,
    e_new.first_name || ' ' || e_new.last_name AS nama_supir_baru,
    e_old.first_name || ' ' || e_old.last_name AS old_supir_name,
    new_row.address,
    new_row.latitude,
    new_row.longitude
DARI 
    raw_business_data.riwayat_Supir baris_baru
Gabung 
    raw_business_data.riwayat Supir baris lama
    ON new_row.changed_datetime = old_row.changed_datetime
    DAN new_row.object_id = old_row.object_id
JOIN kiri 
    raw_business_data.employees e_new ON new_row.new_employee_id = e_new.employee_id
JOIN kiri 
    raw_business_data.employees e_old ON old_row.old_employee_id = e_old.employee_id
JOIN kiri 
    raw_business_data.objects o ON new_row.object_id = o.object_id
ORDER BY 
    waktu penugasan;
```

## Menganalisis data sensor

### Pelacakan level bahan bakar

Kueri ini menunjukkan cara menganalisis data sensor bahan bakar:

```sql
SELECT
    o.object_label AS kendaraan,
    t.device_time,
    i.value::numeric AS bahan_bakar_level
DARI
    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 = 'Bahan bakar'
    AND t.device_time > (CURRENT_DATE - INTERVAL '7 days')
ORDER BY
    o.object_label, t.device_time;
```

## Analisis geospasial

### Kendaraan di geozona

Identifikasi kendaraan yang memasuki geozona tertentu:

```sql
SELECT
    o.object_label AS kendaraan,
    z.zone_label AS geozone,
    t.device_time AS entry_time
DARI
    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
        -- Hitung apakah titik berada di dalam zona melingkar
        -- Ubah koordinat dari bilangan bulat berskala ke desimal
        (
            KASUS
                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
                    )
                Lainnya salah
            AKHIR
        )
WHERE
    t.device_time > (CURRENT_DATE - INTERVAL '1 day')
ORDER BY
    z.zone_label, o.object_label, t.device_time;
```

{% hint style="info" %}
Kueri ini menggunakan fungsi spasial PostGIS. Jika Anda mengalami galat, pastikan ekstensi PostGIS diaktifkan di basis data Anda.
{% endhint %}

## Tips optimasi performa

Saat bekerja dengan Gudang Data Cloud, pertimbangkan teknik optimasi berikut:

1. **Gunakan pemfilteran berbasis waktu**: Selalu sertakan filter waktu pada `device_time` atau `record_added_at` Kolom untuk membatasi data yang dipindai.\
   **Praktik yang baik**:

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

**Hindari ini** (memindai seluruh tabel)

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

2. **Manfaatkan indeks**: Basis data memiliki indeks pada `(device_id, device_time)` pasangan. Susun kueri Anda untuk menggunakan indeks ini jika memungkinkan.
3. **Gunakan penggabungan secara selektif**: Gabungkan tabel hanya bila perlu dan coba saring data sebelum menggabungkan tabel besar.
4. **Konversi bilangan bulat berskala**: Ingat bahwa data koordinat disimpan sebagai bilangan bulat berskala. Konversikan hanya pada SELECT akhir, bukan dalam klausa WHERE.
5. **Batasi set hasil**: Selalu gunakan LIMIT untuk kueri eksploratif agar tidak mengembalikan jutaan baris.

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

6. **Manfaatkan hubungan hierarkis**: Susun kueri kompleks mengikuti hierarki entitas (**dealer → klien → pengguna/perangkat → Pelacak**) untuk penggabungan dan penyaringan yang lebih efisien.
7. **Kelola koneksi dengan benar**: Tutup koneksi basis data saat tidak digunakan, terutama di alat BI atau skrip terjadwal, untuk menghindari penguncian sumber daya atau masalah waktu habis.

## Langkah berikutnya

Contoh-contoh ini menyediakan titik awal untuk bekerja dengan data Anda. Seiring Anda semakin mengenal skema, Anda dapat mengembangkan kueri yang lebih kompleks untuk memenuhi kebutuhan bisnis spesifik Anda.


---

# 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/id/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.
