1

Konu: select top N konusu

asagidaki gibi bir sorgu ile bu tablodan son 3 tarihli her cari koda ait satirlari cekmek istiyorum ama
sadece 3 kayit geliyor , group by siralamasini degistirsemde sonuc degismiyor gene 3 kayit sizce nasil bir sorgu dizilimi olmali ?

Visual Fox Pro
SELECT TOP 3 tarih,ckodu,aciklama FROM chnotes ORDER BY tarih desc WHERE NOT EMPTY(tarih) GROUP BY 1,2,3

2 Son düzenleyen, ugurlu2001 (01.02.2008 15:01:36)

Re: select top N konusu

soykanozcelik yazdı:

asagidaki gibi bir sorgu ile bu tablodan son 3 tarihli her cari koda ait satirlari cekmek istiyorum ama
sadece 3 kayit geliyor , group by siralamasini degistirsemde sonuc degismiyor gene 3 kayit sizce nasil bir sorgu dizilimi olmali ?

Visual Fox Pro
SELECT TOP 3 tarih,ckodu,aciklama FROM chnotes ORDER BY tarih desc WHERE NOT EMPTY(tarih) GROUP BY 1,2,3


Benzer bir örnek, işine yarar umarım...

Visual Fox Pro
SELECT * FROM Islemana WHERE Tarih IN ;

(SELECT TOP 3 MAX(Tarih) FROM ISLEMANA GROUP BY Tarih ORDER BY Tarih DESC )

sendeki karşılığıda şöyle olmalı :

Visual Fox Pro
SELECT tarih,ckodu,aciklama FROM chnotes ; 

WHERE Tarih IN ( SELECT TOP 3 MAX(Tarih) FROM chnotes GROUP BY Tarih ORDER BY tarih desc ) ;
GROUP BY 1,2,3
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: select top N konusu

maalesef bendeki karsiliginda da degisen bir sey yok Ugur sad

4

Re: select top N konusu

SELECT  a.kod,b.tarih FROM cari a,carihar b WHERE a.kod=b.kod AND top3(a.kod,b.tarih)


FUNCTION top3
LPARAMETERS xkod,xtarih
    SELECT TOP 3 tarih FROM carihar WHERE kod=xkod ORDER BY tarih DESC INTO CURSOR test
    LOCATE FOR tarih=xtarih
    RETURN FOUND()


yalnız yukarıdaki aynı tarihlere birden fazla işlem girilmişse aynı tarihte 3 kayıt dahi getirebilir. illa ilk üç farklı tarihtekileri istiyorsan DISTINCT kullanmalısın.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

5

Re: select top N konusu

Metin,
sorun sorgunun tek tablo uzerinden yapiliyor olmasi ve amaci bu tablo icinde kayitli cari kodlara ait son 3 tarihli aciklama bilgisinin oldugu kayitlari cekmek

6 Son düzenleyen, aefe (01.02.2008 18:41:11)

Re: select top N konusu

Sanırım bu işini görür,

Visual Fox Pro
SELECT tarih,ckodu,aciklama  FROM chnotes WHERE tarih in(SELECT TOP 3 tarih FROM chnotes  

group BY tarih ORDER BY tarih desc)

7

Re: select top N konusu

soykanozcelik yazdı:

Metin,
sorun sorgunun tek tablo uzerinden yapiliyor olmasi ve amaci bu tablo icinde kayitli her bir cari koda ait son 3 tarihli aciklama bilgisinin oldugu kayitlari cekmek


şeklinde düzeltelim mi Soykan hocam ....

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

8

Re: select top N konusu

soykanozcelik yazdı:

Metin,
sorun sorgunun tek tablo uzerinden yapiliyor olmasi ve amaci bu tablo icinde kayitli cari kodlara ait son 3 tarihli aciklama bilgisinin oldugu kayitlari cekmek


o zaman daha kolay:


SELECT  kod,tarih FROM cari WHERE top3(kod,tarih)


FUNCTION top3
LPARAMETERS xkod,xtarih
    SELECT TOP 3 tarih FROM cari WHERE kod=xkod ORDER BY tarih DESC INTO CURSOR test
    LOCATE FOR tarih=xtarih
    RETURN FOUND()

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

9

Re: select top N konusu

metin yazdı:
soykanozcelik yazdı:

Metin,
sorun sorgunun tek tablo uzerinden yapiliyor olmasi ve amaci bu tablo icinde kayitli cari kodlara ait son 3 tarihli aciklama bilgisinin oldugu kayitlari cekmek


o zaman daha kolay:


SELECT  kod,tarih FROM cari WHERE top3(kod,tarih)


FUNCTION top3
LPARAMETERS xkod,xtarih
    SELECT TOP 3 tarih FROM cari WHERE kod=xkod ORDER BY tarih DESC INTO CURSOR test
    LOCATE FOR tarih=xtarih
    RETURN FOUND()


ben parametre olarak cari kodu ve tarih bilgisi vermiyorum sadece bu tablo icinde hareket gormus tum carilere ait son 3 tarihli kayitlari siralamak istiyorum sanırım anlatamadim sad

10 Son düzenleyen, ugurlu2001 (01.02.2008 17:37:49)

Re: select top N konusu

metin yazdı:
soykanozcelik yazdı:

Metin,
sorun sorgunun tek tablo uzerinden yapiliyor olmasi ve amaci bu tablo icinde kayitli cari kodlara ait son 3 tarihli aciklama bilgisinin oldugu kayitlari cekmek


o zaman daha kolay:

SELECT  kod,tarih FROM cari WHERE top3(kod,tarih)

FUNCTION top3
LPARAMETERS xkod,xtarih
    SELECT TOP 3 tarih FROM cari WHERE kod=xkod ORDER BY tarih DESC INTO CURSOR test
    LOCATE FOR tarih=xtarih
    RETURN FOUND()


Metin abi, ufak bi eklentiyle, aşağıdaki gibi çalışıyor ...

Visual Fox Pro
SELECT  tarih,ckodu,aciklama FROM chnotes  WHERE top3(ckodu,tarih) ORDER BY CKodu, Tarih DESC HAVING Tarih <> CTOD("  .  .    ")

 
 
FUNCTION top3
LPARAMETERS xkod,xtarih
    SELECT TOP 3 tarih FROM chnotes ;
    WHERE ckodu=xkod ORDER BY tarih DESC INTO CURSOR test
    LOCATE FOR tarih=xtarih
    RETURN FOUND()
 
RETURN
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

11

Re: select top N konusu

evet simdi oldu smile ben kod taki kısmı parametre gibi algiladim ama oraya parametre zaten ilk sorgudan gidiyor smile

12

Re: select top N konusu

UT dede sormustum bu da ayri bir cozum

Visual Fox Pro
Select chnotes.tarih, chnotes.ckodu, chnotes.aciklama ;

    FROM chnotes ;
    JOIN (Select cna.tarih, cna.ckodu ;
    FROM chnotes cna ;
    JOIN chnotes cnb ;
    ON cna.ckodu = cnb.ckodu ;
    AND cna.tarih <= cnb.tarih ;
    GROUP By 1, 2 ;
    HAVING Cnt(*) <= 3 ) MostRecent ;
    ON chnotes.tarih = MostRecent.tarih ;
    AND chnotes.ckodu = MostRecent.ckodu ;
    INTO Cursor MostRecentNotes
 
SELECT * FROM MostRecentNotes ORDER BY ckodu

13

Re: select top N konusu

UT deki çok çok daha hızlı çalışıyor. Bilginize ...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

14

Re: select top N konusu

ugurlu2001 yazdı:

UT deki çok çok daha hızlı çalışıyor. Bilginize ...


normal olarak... smile

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com