SQL Gecikmesi

Sql Gecikmesi



SQL lag() işlevi, geçerli satırdan önceki satıra belirli bir uzaklıkla erişmenizi sağlar. Kısacası lag() işlevi, geçerli satırdan bir önceki satıra erişmenizi sağlar. Ofset değerini belirterek, geçerli satırdan önceki 1, 2, 3 vb. satırlara erişebilirsiniz.

Sonraki satırlara erişmenizi sağlayan lead() fonksiyonunun tam tersidir.







SQL Gecikmesi()

İşlev sözdizimi aşağıdaki gibidir:



LAG(değer_ifadesi; uzaklık [, varsayılan])
ÜZERİNDE (
[PARTITION BY partition_expression]
ORDER BY sıralama_ifadesi [ASC | DESC]
);

Desteklenen argümanlar şunlardır:



  • değer_ifadesi – Önceki satırın dönüş değerini belirtir. İfadenin tek bir değerle değerlendirilmesi gerekir.
  • telafi etmek – Geçerli satırdan kaç satır geriye doğru erişim sağlanacağını belirtir.
  • varsayılan – Ofset bölümün kapsamı dışındaysa varsayılan değeri ayarlar. Varsayılan olarak değer NULL olarak ayarlanmıştır.
  • Şuna göre bölümlendir: – Verilerin nasıl bölümleneceğini belirtir.
  • Tarafından sipariş – Her bölümdeki satırların sıra formatını ayarlar.

Örnek Veri Kurulumu

Lag() fonksiyonunun işleyişine dalmadan önce, gösterim amacıyla temel bir tablo oluşturarak başlayalım.





CREATE TABLE ürünleri (
ürün_id INT BİRİNCİL ANAHTAR AUTO_INCREMENT,
ürün_adı VARCHAR(255),
kategori VARCHAR(255),
fiyat DECIMAL(10, 2),
miktar INT,
expiration_date DATE,
barkod BÜYÜK
);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Şef Şapkası 25cm',
'fırın',
24.67,
57,
'2023-09-09',
2854509564204);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Bıldırcın Yumurtası - Konserve',
'kiler',
17.99,
67,
'2023-09-29',
1708039594250);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Kahve - Yumurta Nog Capuccino',
'fırın',
92.53,
10,
'2023-09-22',
8704051853058);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Armut - Dikenli',
'fırın',
65.29,
48,
'2023-08-23',
5174927442238);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Makarna - Melek Saçı',
'kiler',
48.38,
59,
'2023-08-05',
8008123704782);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Şarap - Prosecco Valdobiaddene',
'üretmek',
44.18,
3,
'2023-03-13',
6470981735653);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Pasta - Fransız Mini Karışık',
'kiler',
36.73,
52,
'2023-05-29',
5963886298051);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Portakal - Konserve, Mandalina',
'üretmek',
65.0,
1,
'2023-04-20',
6131761721332);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Domuz - Omuz',
'üretmek',
55.55,
73,
'2023-05-01',
9343592107125);

sokmak
içine
ürünler (ürün_adı,
kategori,
fiyat,
miktar,
Son kullanma tarihi,
barkod)
değerler ('Dc Hikiage Hira Huba',
'üretmek',
56.29,
53,
'2023-04-14',
3354910667072);

Veri oluşturma ve kurulum tamamlandıktan sonra birkaç örneği tartışmaya devam edelim.

Örnek 1: Temel Kullanım

Bu durumda ürün bilgilerini içeren bir “ürünler” tablosuna ulaşabiliyoruz. Mevcut satırdan önceki barkodu almak istediğimizi varsayalım.



lag() fonksiyonunu şu şekilde kullanabiliriz:

seçme
Ürün adı,
fiyat,
gecikme (barkod) bitti (kategoriye göre bölümleme
tarafından sipariş
fiyat artışı) önceki_item olarak
itibaren
ürünler p;

Verilen kod, verileri kategoriye göre bölümlere ayırır. Daha sonra lag() işlevini kullanarak bölümdeki önceki barkodu getirir.

Sonuçta ortaya çıkan çıktı aşağıdaki gibidir:

Örnek 2: Varsayılan Değerin Ayarlanması

Belirli bir sütunda önceki satır yoksa (sınır dışı), işlev, önceki örnekte gösterildiği gibi değeri NULL olarak ayarlar.

Kapsam dışı erişim için varsayılan bir değer ayarlamak amacıyla aşağıdakileri yapabiliriz:

seçme
Ürün adı,
fiyat,
lag(barcode, 1, 'N/A') over (kategoriye göre bölümleme)
tarafından sipariş
fiyat artışı) önceki_item olarak
itibaren
ürünler p;

Varsayılan değeri “Yok” olarak ayarladık. Bu, çıktıda gösterildiği gibi sınır dışı değerlerin yerini almalıdır:

Örnek 3: Özel Ofset Değeri

Geçerli satırdan önceki iki satıra erişmek istediğinizi varsayalım. Bunu ofset değerini 2'ye ayarlayarak yapabiliriz.

Örnek bir sorgu aşağıda gösterilmektedir:

seçme
Ürün adı,
fiyat,
lag(barcode, 2, 'N/A') over (kategoriye göre bölümleme)
tarafından sipariş
fiyat artışı) önceki_item olarak
itibaren
ürünler p;

Çıktı:

Bu sorgu her bölümdeki önceki iki satırı döndürür.

Çözüm

Bu derste, geçerli satırdan bir önceki öğeyi almak için lag() işleviyle nasıl çalışacağımızı öğrendik.