Bir sql sorusu da benden

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Bir sql sorusu da benden

Mesaj gönderen naile »

Şimdi bir tablomda şöyle alanlar var

Kod: Tümünü seç

    Borc     Gecikme
1.   10            25
2.   15            23
3.   20            10
Borc alanı borç miktarını gösteriyor, gecikme ise borcun kaç gün geciktiğini. Ben max gecikmeyi öğrenmek istiyorum yani bu verilere göre bu ilk kayıt yani 25 günlük gecikme oluyor. Ama benim bir de yok sayılacak belli bir tutarım var. Yani diyelim ki bu tutarım 26,
1. Birinci sıradaki borç 10 olduğu için 26 in altında ve ben bunu almayacağım
2. İkinci kayda baktığımda birinci ve ikinciyi toplayıp yani 10+15 < 26 olduğundan 2. sıradaki gecikmeyi de almıyorum
3. üçüncü kayıtta 10+15+20 >= 26 olduğundan benim en büyük gecikmem 3. kayıt olan 10 olacak


İşte bu mantıkla çalışacak bir sqle ihtiyacım var :(
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
eğer vt sp leri destekliyorsa sp nin içinde değişken tanımlayıp yapabilirsin sanırım.
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Örnek veri kümesindeki 1. 2. 3. şeklinde giden order numarası kolon adinin 'sira' oldugu varsayimiyla;

Kod: Tümünü seç

SELECT borc,gun 
FROM naile a 
WHERE 
(SELECT SUM(borc) FROM naile b WHERE b.sira <= a.sira) > 26
şeklinde bir deneyebilir misiniz ? 26 yerine kullanacağınız parametre ile kontrol edilebilir bir query olacaktır.

Kolay gelsin,
En son doganzorlu tarafından 22 Eyl 2004 09:42 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

"sira" nedir onu anlayamadım :roll:
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

Sanırım tablonun uniq alanı
sıra numarası
autoinc alan
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Misafir

delphi de bir döngü bu işi çözer ama.

Mesaj gönderen Misafir »

bir döngü kurarsınız ve top ile görüntülenecek kayıt sayısını birer artırıp şartın sağlanıp sağlanmadığını kontrol edersiniz. sağladığı yerde döngüyü kırarsınız.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Kod: Tümünü seç

 ..kayıt sayısını birer artırıp 
işte bunu nasıl yapabilirim :)
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

tablona yeni bir alan ekleyip bu alana sırayla değer atarsın. (eğer yeni eklediğin alan autoinc yaparsan paradoks kendisi değer veriyor) alanın ismi sira olursa Doğan beyin gönderdiği kod çalışacaktır.

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Stored Procedure ile çözüm

Mesaj gönderen Salih »

Hazır stored procedure antremanı yaparken bu sorunu SP ile nasıl çözeriz diye şöyle bir şey yaptım, istediğiniz işi yapıyor :

CREATE PROCEDURE NEW_PROCEDURE
RETURNS (SAYI INTEGER)
AS
DECLARE VARIABLE TOTAL INTEGER = 0;
DECLARE VARIABLE SAY INTEGER = 0;
begin
WHILE (Total < 26) DO
BEGIN
SAY = SAY + 1;
SELECT SUM(BORC) FROM NEW_TABLE WHERE SIRA <= :SAY INTO :TOTAL;
END
SAYI = SAY;
suspend;
end
Sevgi, Saygı.....
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Herkese çok çok teşekkür ederim. Ama işte benim SIRA diye bir alanım yok ve tabloma böyle biir alanda ekleyemiyorum çünkü zaten sorguyu bir viewvden yapıyorum ve bu viewin içinde yaklaşık 10 ayrı tablo ve 5 tane union var ve tablo Logo Unity nin tabloları. Valla işin içinden bu şekilde çıkamadım birtürlü, ama uğraşan herkese çok teşekkür ederim..
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

SIRA adında olması çok önemli değil. Sizin istediğiniz algoritmaya göre "öncekilerin toplamı" diye bir kavram var. Behsettiğiniz view da da önceki sonraki ni belirten bir kolon mutlaka vardır. Sira yerine onu kullanacaksınız. Bu tarih olabilir, rownum olabilir, senet numarası olabilir vs,vs..

Kolay gelsin.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Evet tarihe göre yaptım oldu, teşekkürler :)
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

:bravo: :bravo: :bravo:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla