sıralama

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ı
musalpay
Üye
Mesajlar: 77
Kayıt: 28 Tem 2003 01:59
Konum: Kocaeli/Gebze

sıralama

Mesaj gönderen musalpay »

S.A.
acces veritabanı kullanıyorum ve sicil tablosundaki son 6 kayıtı alıp ortalamasını bulup ortalaması 90 üstü olanları ve boolen tipindeki alanda
false değerini gönderenleri bulmak istedim yalnız bir türlü yapamadım
ilginiz ve önerileriniz için teşekkürler
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Malesef izahatınızdan tablo yapısını anlayamadım. Yani son 6 kaydın ortalamasını alacagınızı soyluyorsunuz ama sonra da ortalaması 90'dan buyuk deyince bir yanlıslık var gibime geliyor... Cunku 6 kayıt icin ortalama zaten tek bir rakam uretecektir. ortalamaları 90'dan buyuk demek ise ortalama diye bir alan oldugunu cagristiriyor ama ilk soylenen ile celisiyor....
Tablo yapınızı net bir sekilde izah edebilirseniz yardımcı olmaya calisalim....

iyi çalışmalar dilerim....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
musalpay
Üye
Mesajlar: 77
Kayıt: 28 Tem 2003 01:59
Konum: Kocaeli/Gebze

Mesaj gönderen musalpay »

Sicil diye bir tablom var bu tabloda sicilnotu sicilyılı ve kullandı alanları var amacım son 6 yılın ortalamasını almak ve aldığım ortalamanın 90dan büyük olanları ve kullandı alanı false olanları listelemek istiyorum ama olmuyor daha doğrusu içinden bir türlü çıkamadım.
ilgileriniz ve cevaplarınız için teşekkürler.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Delphide basit bir algoritma ile yapabilirsin
SQL ile biraz zor gibi (belkide imkansız, Select le olurmu acaba?...-fahrettin abiyi gaza getirelim-)

Son 6 kayıt:
table acılıp son kayıta Last ile gidilir.

Kod: Tümünü seç

var
toplam,ort:Intege;
begin
   toplam:=0;
   table.Last;
  for i:=1 to 6 do
  begin
      toplam:=toplam+tableALANIN.AsInteger;
      table.Prior;
  end;  
  ort:=toplam/6; 
aynı islemlerin bir benzerini (bu 6 kayıt için),yine bir dongu ile
istedigin alanı bu ort ile karsılastıracak ve boolean alanını da test edeceksin
yani mantık yukarıdaki gibi
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Aslında ben gazı çoktan aldım da... :D Ne çare ki veritabanı access imiş... Sybase olacakti ki?
bir kac subquery desteği ile bu iş olur yani.... Ters sıralama ve first 6 anahtar kelimesi bunların ortalması bir subquery'den rahatlıkla gelir ama....

Tam veriyapısını anlayamadım. Bir de access ne kadaraını yapabilir bilemiyorum....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
mkarabulut
Üye
Mesajlar: 53
Kayıt: 26 May 2004 11:15
Konum: Gaziantep
İletişim:

Mesaj gönderen mkarabulut »

Merhaba,

Soruda müphem noktalar var ancak ben şansımı denemek istiyorum

Kod: Tümünü seç

SELECT Top 6 siciladi, sicilnotu
FROM tablo
HAVING avg(sicilnotu) > 90
ORDER By sicilnotu DESC
Çok basit bir çözüm oldu, muhtelemen çalışmayacak :P[/code]
onaydin

Mesaj gönderen onaydin »

hocam kodunuz mysql üzerinde sorunsuz çalışıyor
eğer kullandı alanı sadece 2004 yılı için geçerliyse
şoyle birşey olabilirdi

Kod: Tümünü seç

SELECT sicil_no
FROM 3074_SICIL AS p
WHERE YIL <= 2004 AND YIL > 1998 AND 
(
 (
 SELECT kullandi
  FROM 3074_sicil
  WHERE sicil_no = p.sicil_no
  ORDER BY YIL DESC 
  LIMIT 0 , 1
 ) = 0
)
GROUP BY SICIL_NO
HAVING avg( NOTU ) > 90
malum top yerine limit kullanılıyor
bide tarihleri denemek için oyle kullandım
access da galiba subquery yok bu nedenle çalışmayacak.
Cevapla