Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Cari Aktiviti Seterusnya daripada Kumpulan B Selepas Aktiviti Terakhir daripada Kumpulan A dalam PostgreSQL?

Bagaimanakah Saya Boleh Cari Aktiviti Seterusnya daripada Kumpulan B Selepas Aktiviti Terakhir daripada Kumpulan A dalam PostgreSQL?

Barbara Streisand
Lepaskan: 2024-12-28 05:31:10
asal
956 orang telah melayarinya

How Can I Find the Subsequent Activity from Group B After the Last Activity from Group A in PostgreSQL?

Fungsi Lead/Lag Bersyarat dalam PostgreSQL

Anda mempunyai jadual yang mengandungi aktiviti untuk pengguna dan cap masa yang berbeza. Anda ingin mengenal pasti aktiviti terakhir daripada kumpulan A untuk setiap pengguna dan kemudian tentukan aktiviti seterusnya daripada kumpulan B, jika ada.

Menggunakan Fungsi Utama

Pada mulanya, anda cuba menggunakan fungsi lead() untuk menyelesaikan masalah ini. Walau bagaimanapun, fungsi lead() dengan sendirinya tidak mencukupi untuk tugasan ini kerana ia hanya mendapatkan semula nilai seterusnya dalam turutan, tanpa mengira sebarang syarat.

Fungsi Tetingkap Bersyarat (FILTER)

Untuk menggunakan syarat dengan berkesan pada fungsi tetingkap, PostgreSQL menawarkan klausa FILTER. Malangnya, klausa ini pada masa ini tidak dilaksanakan untuk fungsi tetingkap benar seperti lead() dan lag(), kerana ia hanya tersedia untuk fungsi agregat.

Penyelesaian Alternatif Menggunakan DISTINCT ON

Untuk menangani cabaran ini tanpa PENAPIS, kami boleh menggunakan gabungan pernyataan DISTINCT ON dan CASE bersama-sama dengan subquery:

SELECT name
     , CASE WHEN a2 LIKE 'B%' THEN a1 ELSE a2 END AS activity
     , CASE WHEN a2 LIKE 'B%' THEN a2 END AS next_activity
FROM  (
   SELECT DISTINCT ON (name)
          name
        , lead(activity) OVER (PARTITION BY name ORDER BY time DESC) AS a1
        , activity AS a2
   FROM   t
   WHERE (activity LIKE 'A%' OR activity LIKE 'B%')
   ORDER  BY name, time DESC
   ) sub;
Salin selepas log masuk

Pendekatan ini memanfaatkan klausa DISTINCT ON untuk mengumpulkan baris mengikut pengguna dan memilih aktiviti kelayakan terakhir daripada kumpulan A untuk setiap pengguna. Penyataan CASE digunakan untuk menentukan aktiviti yang sesuai dan aktiviti seterusnya berdasarkan syarat yang dinyatakan.

Penyelesaian Optimum untuk Set Data Besar

Untuk kes yang melibatkan bilangan baris yang besar bagi setiap pengguna, teknik alternatif mungkin lebih cekap. Teknik ini biasanya melibatkan mencipta jadual sementara atau menggunakan strategi pengindeksan lanjutan. Walau bagaimanapun, pendekatan optimum mungkin berbeza-beza bergantung pada ciri khusus data dan beban kerja anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Aktiviti Seterusnya daripada Kumpulan B Selepas Aktiviti Terakhir daripada Kumpulan A dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan