Selamlar,
Bu arada bir eklenti yapayım. Henüz test etmedim ama RDBMS'lerdeki mantık gereği, bu tür Yürüyen bakiye'lerde Nested Query'ler kullanmak, hem sistemi yorar hem de fazla kaynak tüketir. Tabi doğal olarak da vakit alıcı olur. Bu tür Query'ler yerine Procedure hazırlamanızı öneririm. Test edip deneyeceğim. Sonuçlarını da yazacağım.
Kolay Gelsin
Adnan
Firebird ile BORC ALACAK BAKIYE
Re: Firebird ile BORC ALACAK BAKIYE
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Re: Firebird ile BORC ALACAK BAKIYE
Selamlar,
Az önce testlerimi tamamladım.
Daha önceden hazırladığım bir SP ile, Nested Query içeren Yürüyen Bakiye Sorgusunu kıyasladım. Sonuçlar tahmin ettiğim gibi çıktı.
173,000 civarı Cari Hareket olan bir tabloda, Yaklaşık 6,000 kadar Cari Karta ait Ekstre hazırladım.
1 dakika 42 Saniye'de Nested Query çalıştı.
10 Saniye Stored Procedure sürdü. (Ki SP'nin içinde bir sürü kontrol de var.)
Bunların dışında bu işlemleri yaparken Kartezyen çarpıma girip, dolaştığı kayıt sayıları 100,000,000'u geçiyor.
Dediğim gibi bu tür bir şey için SP yazıp kullanırsanız daha hızlı sonuç alırsınız ve sistem kaynaklarını da daha efektif kullanmış olursunuz.
Kolay Gelsin
Adnan
Az önce testlerimi tamamladım.
Daha önceden hazırladığım bir SP ile, Nested Query içeren Yürüyen Bakiye Sorgusunu kıyasladım. Sonuçlar tahmin ettiğim gibi çıktı.
173,000 civarı Cari Hareket olan bir tabloda, Yaklaşık 6,000 kadar Cari Karta ait Ekstre hazırladım.
1 dakika 42 Saniye'de Nested Query çalıştı.
10 Saniye Stored Procedure sürdü. (Ki SP'nin içinde bir sürü kontrol de var.)
Bunların dışında bu işlemleri yaparken Kartezyen çarpıma girip, dolaştığı kayıt sayıları 100,000,000'u geçiyor.
Dediğim gibi bu tür bir şey için SP yazıp kullanırsanız daha hızlı sonuç alırsınız ve sistem kaynaklarını da daha efektif kullanmış olursunuz.
Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: Firebird ile BORC ALACAK BAKIYE
merhaba;
kodu yukarıdaki şekilde değiştirdim. iki kodda da bana verdiği sonuç, bakiye sütunundaki her hücrede seçilen carinin toplam borç ile alacağının farkını yazıyor. her satırdaki bakiyeyi ayrı ayrı vermiyor. aşağıdaki gibi bir sonuç veriyor. halbuki birinci satırda bakiye 10 ikinci satırda bakiye 5 üçüncü satırda bakiye 35 son satırda da bakiye 20 olmalıdır
borç alacak bakiye
10 0 20
0 5 20
30 0 20
0 15 20
Kod: Tümünü seç
SELECT CH.ID,CH.CARIID,CH.TARIH,CH.BORC AS BORC,CH.ALACAK AS ALACAK,
(SELECT ABS(COALESCE(SUM(BORC),0) - COALESCE(SUM(ALACAK),0)) FROM TBLCARIHAR WHERE TBLCARIHAR.CARIID=CH.CARIID) as bakiye
FROM TBLCARIHAR CH
WHERE (CH.CARIID=24)
ORDER BY TARIH, ID
borç alacak bakiye
10 0 20
0 5 20
30 0 20
0 15 20
İsteyen, yapabildiğinden daha fazlasını yapar.
Re: Firebird ile BORC ALACAK BAKIYE
Selamlar,
Yürüyen bakiye işlemlerinde, Query'nin hesap yaptığı satır için Nested Query'nin Where şartları ayarlanmalı.
Yukarıda XXXXXXXXXX şeklinde yazılı olan yere Ana Tablon olan CH'deki Tarih ile, SUM çektiğin tablo olan TBLCARIHAR için
AND TBLCARIHAR.TARIH <= CH.TARIH AND TBLCARIHAR.ID <= CH.ID
bunu eklemelisin. Haa bir de SUM Querysinde ORDER BY TBLCARIHAR.CARIID, TBLCARIHAR.TARIH, TBLCARIHAR.ID eklemelisin.
Kolay Gelsin
Adnan
Yürüyen bakiye işlemlerinde, Query'nin hesap yaptığı satır için Nested Query'nin Where şartları ayarlanmalı.
Kod: Tümünü seç
SELECT CH.ID,CH.CARIID,CH.TARIH,CH.BORC AS BORC,CH.ALACAK AS ALACAK,
(SELECT ABS(COALESCE(SUM(BORC),0) - COALESCE(SUM(ALACAK),0)) FROM TBLCARIHAR WHERE TBLCARIHAR.CARIID=CH.CARIID XXXXXXXXXXXX) as bakiye
FROM TBLCARIHAR CH
WHERE (CH.CARIID=24)
ORDER BY TARIH, ID
AND TBLCARIHAR.TARIH <= CH.TARIH AND TBLCARIHAR.ID <= CH.ID
bunu eklemelisin. Haa bir de SUM Querysinde ORDER BY TBLCARIHAR.CARIID, TBLCARIHAR.TARIH, TBLCARIHAR.ID eklemelisin.
Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: Firebird ile BORC ALACAK BAKIYE
merhaba;
çok teşekkür ederim. dediğiniz şekilde oldu. kolay gelsin;
çok teşekkür ederim. dediğiniz şekilde oldu. kolay gelsin;
İsteyen, yapabildiğinden daha fazlasını yapar.