Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Sorgu ile kendinden onceki ve sonraki kayda erişme
#1
Selamlar
Bu aralar işten başımı kaldıramıyorum. Fakat @Fesih ARSLAN hocanın yazdıklarını görünce utandım bari Son uğraşlarımdan biri olan SQL üzerinde sorgulama yaparken bir önceki ve bir sonraki kayıt üzerinden veri çekme ile yaptığım işin basit bir halini Döviz Kurları için örnek olsun diye paylaşayım istedim.
   
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
(11-06-2019, Saat: 12:24)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Selamlar
Bu aralar işten başımı kaldıramıyorum. Fakat @Fesih ARSLAN hocanın yazdıklarını görünce utandım bari Son uğraşlarımdan biri olan SQL üzerinde sorgulama yaparken bir önceki ve bir sonraki kayıt üzerinden veri çekme ile yaptığım işin basit bir halini Döviz Kurları için örnek olsun diye paylaşayım istedim.

Lafım size değildi, profilinizde DelphiCan'a katkılarınız görünüyor. 
Paylaşım ve katkılarınızdan dolayı teşekkür ederim.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
Katkı olması açısından burada kullanılan metod'lar "Analytic Functions" adı altında geçmekte. Gördüğüm kadarıyla MS SQL'deki analytic functions sayısı Oracle'a göre daha az. Oracle tarafında Lead, Lag, Rank, Dense Rank vs. gibi metodların dışında bütün grup fonksiyonları da (min, max, count, avg, vs.) yine analytic function olarak kullanılabilmekte, muhtemelen MS SQL'de de aynı durum söz konusudur, teyit edebilir misiniz? Bu sayede sorguda bir group by ifadesi olmadığı halde, farklı gruplama mantıkları ile gruplanmış değerler elde edebilirsiniz.
Cevapla
#4
(11-06-2019, Saat: 13:17)edo Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Katkı olması açısından burada kullanılan metod'lar "Analytic Functions" adı altında geçmekte. Gördüğüm kadarıyla MS SQL'deki analytic functions sayısı Oracle'a göre daha az. Oracle tarafında Lead, Lag, Rank, Dense Rank vs. gibi metodların dışında bütün grup fonksiyonları da (min, max, count, avg, vs.) yine analytic function olarak kullanılabilmekte, muhtemelen MS SQL'de de aynı durum söz konusudur, teyit edebilir misiniz? Bu sayede sorguda bir group by ifadesi olmadığı halde, farklı gruplama mantıkları ile gruplanmış değerler elde edebilirsiniz.

@edo bahsettiğinizi anladığım kadarı ile cevap vermeye çalışayım belki yazdığınızı yabnlış anlamış olabilirim.
"Select Max(ForexBuying) From DOVIZKURLARI" gibi bir komut sadece size tek bir satır döndürür. ve tüm veri tabanındaki en büyük değeri getirir
Fakat
"Select Tarih, Max(ForexBuying) From DOVIZKURLARI Group By Tarih" ise içerideki her tarih için en büyük değeri getirir.


Eğer yanlış anlamış ve yanış örneklemiş isem belirtin ki doğru bilgiyi burada tekrardan paylaşalım
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#5
Emeğinize sağlık @adelphiforumz
There's no place like 127.0.0.1
WWW
Cevapla
#6
(11-06-2019, Saat: 14:10)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(11-06-2019, Saat: 13:17)edo Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Katkı olması açısından burada kullanılan metod'lar "Analytic Functions" adı altında geçmekte. Gördüğüm kadarıyla MS SQL'deki analytic functions sayısı Oracle'a göre daha az. Oracle tarafında Lead, Lag, Rank, Dense Rank vs. gibi metodların dışında bütün grup fonksiyonları da (min, max, count, avg, vs.) yine analytic function olarak kullanılabilmekte, muhtemelen MS SQL'de de aynı durum söz konusudur, teyit edebilir misiniz? Bu sayede sorguda bir group by ifadesi olmadığı halde, farklı gruplama mantıkları ile gruplanmış değerler elde edebilirsiniz.

@edo bahsettiğinizi anladığım kadarı ile cevap vermeye çalışayım belki yazdığınızı yabnlış anlamış olabilirim.
"Select Max(ForexBuying) From DOVIZKURLARI" gibi bir komut sadece size tek bir satır döndürür. ve tüm veri tabanındaki en büyük değeri getirir
Fakat
"Select Tarih, Max(ForexBuying) From DOVIZKURLARI Group By Tarih" ise içerideki her tarih için en büyük değeri getirir.


Eğer yanlış anlamış ve yanış örneklemiş isem belirtin ki doğru bilgiyi burada tekrardan paylaşalım

Tam olarak anladığınız gibi değil (tam olarak izah edememiş olabilirim). Örneğin ilk iki kolon sırasıyla hafta bazında ve order code bazında count verirken, hiç bir gruplama da yoktur sorguda. 

select 
  count(*) over(partition by invoice_week) count_by_week,
  count(*) over(partition by order_code) count_by_order,
  i.* 
from invoice i 
where 
  invoice_year = 2019 and invoice_Week >= 20

İlk yazdığınız alttaki örnekte group by ifadesi olmaksızın başka bir kolona sorguda yer vermezsiniz çünkü aslında gizli bir grup by işlemi vardır.

Select Max(ForexBuying) From DOVIZKURLARI

İkinci verdiğiniz örnek ise zaten bildiğimiz group function kullanımı, analytic function ile ilgisi yok ikisininde. 

Select Tarih, Max(ForexBuying) From DOVIZKURLARI Group By Tarih

Umarım izah edebilmişimdir.

Tabii bu kullanımlar Oracle için. MS SQL'de de aynı kullanım mümkün mü teyit ederseniz sevinirim.
Cevapla
#7
@edo MS SQL tarafındada sizin yapmış olduğunuz örnekteki şekilde bildiğim ve örneklediğim kadarı ile aynen kullanılabiliyor
SQL tarafında Count, Max, Sum gibi fonksiyonlar Aggregate fonksiyon olarak açıklanıyor fakat 
bu fonksiyonun yanına Over Clause özellikliklerini destekleyerek Oracle da yaptığınız işlemlerin aynısını yapmanız mümkün diye biliyorum.
detaylı kullanımlarını ve bazı örnekleri aşağıdaki linkten inceleyebilirsiniz.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Aşağıdaki örnekte ForexBuying değerine ait aynı olanların içerisindeki kayırlardan yola çıkarak; Count, Min ve Max değerlerini veriyor
   
    Select 
          Count(ForexBuying) Over (Partition By ForexBuying) Tarih_Count,
         Min(Tarih) Over (Partition By ForexBuying) Tarih_Min,
         Max(Tarih) Over (Partition By ForexBuying) Tarih_Max,
         d.*
     From DOVIZKURLARI D
     Where ForexBuying > 0
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MSSQL Dinamik sorgu oluşturup filitreleme yapmak. Bay_Y 10 431 22-10-2019, Saat: 11:29
Son Yorum: Bay_Y
  5. kayıttan sonraki 10 kayıt gonulali 4 1.046 02-06-2018, Saat: 17:35
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi