İleri Seviye SQL: CTE ile Tarih Satırları Oluşturmak
# SQL’de CTE ile Tarih Satırları Oluşturmak
Başlangıç ve bitiş tarihine göre günlük olarak tüm tarihleri içeren bir veri seti oluşturmamız gerekiyor. Standart bir WHILE döngüsü bu ihtiyacı karşılayacaktır, ancak bu işlemi CTE ile hem daha performanslı bir hale getirebilir, hem de SELECT ifadesi içinde SQL’in tüm sorgulama nimetlerinden yararlanarak zenginleştirebiliriz.
Peki, nedir bu CTE? : İleri Seviye SQL : CTE (Common Table Expressions)
Dipnot: CTE ile recursive işlemler çerçevesinde yaptığımız her sorgu “başlama noktasındaki satır sayısı” + “100 biriktirme satırı” ile sınırlıdır. Bu limit aşıldığında SQL hata verecektir. Varsayılan limiti kaldırmak için, sorgunun en sonuna “OPTION (MAXRECURSION 0)” ifadesini eklemek gerekmektedir.
# Başlangıç ve Bitiş Tarihlerine Göre Günlük Satırlar Oluşturmak
2022–01–01 ve 2022–01–31 arasında günlük olarak tarih kayıtları oluşturmamız gerekiyor. Peki, CTE ile nasıl bir sorgu hazırlanması gerekir?
Biraz sorgudan bahsetmek gerekirse;
UNION ALLdan önceki sorgu, başlama noktası olarak düşünebilir. Yani 2022–01–01 tarihi olan ilk satırımız.
UNION ALLdan sonraki sorgu ise biriktirme noktası olarak düşünebilir. Yani 2022–01–01 tarihinden sonra nasıl bir artış ile diğer satırların oluşacağı belirleniyor. Biriktirme noktasındaki WHERE koşulu ile bu işleme ne kadar devam edileceğini yani hangi tarihe kadar devam edeceği belirtilir.
Sonuç ise aşağıda ki gibi olacaktır;
# Başlangıç ve Bitiş Tarihlerine Göre Saatlik Satırlar Oluşturmak
2022–01–01 00:00 ve 2022–01–01 23:00 arasında saatlik olarak tarih kayıtları oluşturmamız gerekiyor. Peki, CTE ile nasıl bir sorgu hazırlanması gerekir?
Sonuç ise aşağıda ki gibi olacaktır;
Artık bu bilgiler ışığında kendi veri üretme ihtiyacınıza göre saatlik, günlük, haftalık, aylık ve yıllık gibi tarih verileri üretebilirsiniz.
# Kazanımlar
- CTE’nin tek bir DML ifadesi süresince var olduğunu ve genellikle recursive işlemlerde kullanıldığını,
- View, temp table ve table-value constructora benzediğini ve alanların deklare edilmemesi gerektiğini,
- Birden fazla CTE ifadesi kullanılabildiğini,
- Recursive işlemlerde satır limitinin olduğunu,
- CTE’nin Recursive özelliğiyle, belirli bir tarih aralığı için belirli bir periyodda satır üretebildiğini öğrenmiş olduk.
# Sosyal Medya Hesaplarım
- LinkedIn: Karcan Ozbal | LinkedIn
- Github: karcan (Karcan Ozbal) (github.com)
- Patreon: Karcan is creating little extensions for make your life funny :)
Konu istekleri ve makale ile ilgili tartışmak için yoruma bekliyorum.