0Pricing
SQL Interview Prep · Ders

Sıralı Etkinlikler ve Zaman Pencereleri

Pencere işlevleri kullanılarak adımların sırayla ve bir zaman sınırı içinde gerçekleştiğinin doğrulanması.

Sıralı Etkinlikler ve Zaman Pencereleri, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

Sıra ve Zaman Neden Önemlidir

Önceki dersteki temel huni, yalnızca kullanıcının her adımı gerçekleştirip gerçekleştirmediğini kontrol eder. Daha dikkatli bir mülakatçı şunu sorar: Adımlar doğru sırada ve makul bir süre içinde mi gerçekleşti?

Pazartesi günü satın alma yapan ve cuma günü pazarlama sayfasını ziyaret eden bir kullanıcı huninizden dönüşüm sağlamış sayılmaz. Sıra ve zamanlama, basit bayrak tabanlı bir huniyi güvenilir bir huniye dönüştürür.

Kullanıcı Başına İlk Zaman Damgası Yaklaşımı

Sırayı değerlendirmek için her kullanıcının her adımdaki ilk zamanını kaydedin. İlk ziyaret, ilk kayıt, ilk satın alma.

Ardından temiz bir dönüşüm için first_signup_time >= first_visit_time koşulu ve zincirin devamındaki benzer koşullar sağlanmalıdır. Adım başına gruplanan MIN(event_time) bu dayanak zamanlarını verir.

SELECT
  user_id,
  MIN(CASE WHEN event_name = 'visit'    THEN event_time END) AS first_visit,
  MIN(CASE WHEN event_name = 'signup'   THEN event_time END) AS first_signup,
  MIN(CASE WHEN event_name = 'purchase' THEN event_time END) AS first_purchase
FROM events
GROUP BY user_id;

Adımların Sıralı Olmasını Zorunlu Kılma

Adım başına ilk zaman damgaları elde edildiğinde sırayı zorunlu kılmak bir karşılaştırma işlemidir. Bir kullanıcı ancak her zaman damgası NULL değilse ve zaman damgaları artan sıradaysa gerçekten 3. adıma dönüşmüş olur.

NULL bir zaman damgasının (adımın hiç gerçekleşmediğini gösterir) karşılaştırmayı doğal olarak geçemediğine dikkat edin; tam olarak istediğiniz davranış budur.

WITH t AS (
  SELECT user_id,
    MIN(CASE WHEN event_name='visit'    THEN event_time END) AS visit_t,
    MIN(CASE WHEN event_name='signup'   THEN event_time END) AS signup_t,
    MIN(CASE WHEN event_name='purchase' THEN event_time END) AS purchase_t
  FROM events GROUP BY user_id
)
SELECT COUNT(*) AS converted_in_order
FROM t
WHERE visit_t IS NOT NULL
  AND signup_t  >= visit_t
  AND purchase_t >= signup_t;

Bir Zaman Aralığı Ekleme

Çoğu huninin bir son tarihi vardır: "ilk ziyaretten sonraki 7 gün içinde dönüşüm sağlama." İlk adım ile son adım arasına bir süre sınırı ekleyin.

Tarih aritmetiği SQL lehçesine göre değişir. Postgres'te visit_t + INTERVAL '7 days' yazabilirsiniz; MySQL'de DATE_ADD(visit_t, INTERVAL 7 DAY) kullanın. SQL lehçenizi her zaman belirtin.

WITH t AS (
  SELECT user_id,
    MIN(CASE WHEN event_name='visit'    THEN event_time END) AS visit_t,
    MIN(CASE WHEN event_name='purchase' THEN event_time END) AS purchase_t
  FROM events GROUP BY user_id
)
SELECT COUNT(*) AS purchased_within_7d
FROM t
WHERE purchase_t >= visit_t
  AND purchase_t <  visit_t + INTERVAL '7 days';

Neden Herhangi Bir Zaman Değil de İlk Zaman Damgası

İnce ama önemli bir mülakat noktası: zaman aralığı kullanıcının ilk ziyaretinden mi, yoksa kayıt olmadan önceki en son ziyaretinden mi başlamalı? Bu, ürün sorusuna bağlıdır.

  • İlk temas aralıkları, başlangıçtaki ilgiden dönüşüme kadar geçen süreyi ölçer.
  • Son temas aralıkları, son ziyaretten sonraki dönüşüm hızını ölçer.

Mülakatçıya hangisini kastettiğini sorun; bilinçli seçim yapmak kıdemli olduğunuzu gösterir.

LEAD ile Sıralı Etkinlikler

Karmaşık çok adımlı yollar için pencere işlevleri öne çıkar. Her kullanıcının etkinliklerini zamana göre sıralayın, ardından sonraki etkinliğe bakmak ve bunun beklenen sonraki adım olduğunu doğrulamak için LEAD kullanın.

Bu yaklaşım, adımların ilgisiz etkinliklerle iç içe geçtiği yolları da ele alır.

SELECT
  user_id,
  event_name,
  event_time,
  LEAD(event_name) OVER (PARTITION BY user_id ORDER BY event_time) AS next_event,
  LEAD(event_time) OVER (PARTITION BY user_id ORDER BY event_time) AS next_time
FROM events;

Beklenen Sonraki Adımla Eşleştirme

LEAD yaklaşımını geliştirin: hemen ardından 'kayıt' gelen 'ziyaret' satırlarını tutun. Böylece yalnızca birlikte bulunmayı değil, gerçek sıralı geçişleri bulursunuz.

Tam bir sıralı yolu adım adım doğrulamak için bu geçiş kontrollerini birbirine bağlayabilirsiniz.

WITH seq AS (
  SELECT user_id, event_name, event_time,
    LEAD(event_name) OVER (PARTITION BY user_id ORDER BY event_time) AS next_event
  FROM events
)
SELECT COUNT(DISTINCT user_id) AS visit_then_signup
FROM seq
WHERE event_name = 'visit' AND next_event = 'signup';

Ardışık Adımlar Arasındaki Süre

Mülakatçılar "her adım ne kadar sürüyor?" sorusunu çok sever. Zaman damgasında LEAD kullanıp çıkarma işlemi yapın. Ardışık etkinlikler arasındaki fark, o aşamadaki bekleme süresidir.

En yavaş huni aşamanızı bulmak için her geçişin medyanını veya ortalamasını hesaplayın.

WITH seq AS (
  SELECT user_id, event_name, event_time,
    LEAD(event_time) OVER (PARTITION BY user_id ORDER BY event_time) AS next_time
  FROM events
)
SELECT
  event_name,
  AVG(EXTRACT(EPOCH FROM (next_time - event_time)) / 3600.0) AS avg_hours_to_next
FROM seq
WHERE next_time IS NOT NULL
GROUP BY event_name;

Aynı Zaman Damgası Kenar Durumu

İki etkinlik aynı event_time değerini paylaşırsa ne olur? Bu durumda signup_t >= visit_t eşitsizliği, etkinlikler eş zamanlı olsa bile doğru olur ve yalnızca zamana göre sıralama belirsiz kalır.

  • >= ile > arasında bilinçli seçim yapın ve nedenini açıklayın.
  • Pencere işlevlerinin kesin sonuç vermesi için ORDER BY ifadesine etkinlik sıra kimliği gibi bir eşitlik bozucu ekleyin.

Bunu sorulmadan belirtmek mülakatçıları etkiler.

SELECT user_id, event_name,
  ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_time, event_id) AS step_seq
FROM events;

Sıra ve Zaman Aralığını Tek Sorguda Birleştirme

İşte doğru sırada gerçekleşen ve zaman aralığı içinde kalan eksiksiz huni. İlk ziyareti temel alır, sonraki her adımın ilk gerçekleşmesinin önceki adımdan sonra olmasını gerektirir ve tüm yolu 7 günle sınırlar.

Bu yanıt, hunileri anlayan bir adayı yalnızca bayrakları sayan bir adaydan ayırır.

WITH t AS (
  SELECT user_id,
    MIN(CASE WHEN event_name='visit'    THEN event_time END) AS v,
    MIN(CASE WHEN event_name='signup'   THEN event_time END) AS s,
    MIN(CASE WHEN event_name='purchase' THEN event_time END) AS p
  FROM events GROUP BY user_id
)
SELECT
  COUNT(*) FILTER (WHERE v IS NOT NULL)                                   AS visited,
  COUNT(*) FILTER (WHERE s >= v AND s < v + INTERVAL '7 days')            AS signed_up,
  COUNT(*) FILTER (WHERE s >= v AND p >= s AND p < v + INTERVAL '7 days') AS purchased
FROM t;

SQL Lehçeleri Arası Notlar

Canlı kodlama için iki taşınabilirlik hatırlatması:

  • Toplama işlevlerindeki FILTER (WHERE ...) standart SQL'dir ve Postgres'te çalışır; MySQL'de veya daha eski motorlarda SUM(CASE WHEN ... THEN 1 ELSE 0 END) biçimindeki geri dönüş yaklaşımını kullanın.
  • Aralık söz dizimi farklıdır: Postgres'te + INTERVAL '7 days', MySQL'de DATE_ADD(d, INTERVAL 7 DAY), SQL Server'da DATEADD(day, 7, d).

Varsayımınızı belirtin; lehçelerin farklı olduğunu bildiğiniz sürece mülakatçı hangi lehçeyi kullandığınızı genellikle önemsemez.

Hızlı Kontrol

Kullanıcıların ziyaret -> kayıt -> satın alma adımlarını bu sırayla ve ilk ziyaretten sonraki 7 gün içinde tamamlayanlarını saymanız gerekiyor. Hangi yaklaşım doğrudur?

Özet: Sıralı Olaylar ve Zaman Pencereleri

Temel çıkarımlar:

  • Her kullanıcının her adım için ilk zaman damgasını MIN(CASE ...) ile yakalayın.
  • Her adımın zamanının önceki adımın zamanında veya sonrasında olmasını zorunlu kılarak sıralamayı koruyun.
  • Yolu bir aralıkla sınırlandırın ve kullandığınız lehçenin sözdizimini belirtin.
  • Geçiş kontrolleri ve adımlar arasındaki bekleme süresi için LEAD/LAG kullanın.
  • ORDER BY içinde bir eşitlik bozucu kullanarak aynı zaman damgasındaki eşitlikleri ele alın.

Sonraki konu: hunilerden deneylere geçmek ve varyant başına metrikleri hesaplamak.

Sıkça Sorulan Sorular

“Sıralı Etkinlikler ve Zaman Pencereleri” dersi ücretsiz mi?

Evet — “Sıralı Etkinlikler ve Zaman Pencereleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“Sıralı Etkinlikler ve Zaman Pencereleri” dersinde ne öğreneceğim?

Pencere işlevleri kullanılarak adımların sırayla ve bir zaman sınırı içinde gerçekleştiğinin doğrulanması. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Sıralı Etkinlikler ve Zaman Pencereleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Çok Adımlı Dönüşüm Hunisi Oluşturma
  2. Sıralı Etkinlikler ve Zaman Pencereleri
  3. A/B Testi Ataması ve Ölçümleri
  4. SQL'de Artış, Anlamlılık ve Güvenlik Kontrolleri
← SQL Interview Prep Sayfasına Dön