• 22-10-2014, 21:50:01
    #1
    Selam arkadaşlar şöyle bir sorunum var :
    Bir tabloda
    id - icerik groupid
    1 - içerik1 1
    2 - içerik2 1
    3 - içerik3 1
    4 - içerik4 2
    5 - içerik5 2

    Şeklinde tablomvar istediğim şeyse groupid ye göre her grouptan en son girilen içerikleri listelemek yani groupid 1 olandan en son içerik groupid 2 olandan en son içerikleri listelemek istiyorum.

    şöyle bişey ama bu işime yaramıyor
    select groupid from tbl
    group by groupid
    ben tablodaki tüm verileri çekmek istiyorum ama sadece her groupid den 1 tane gelmeli
    yani
    select * from tbl 
    group by groupid
    gibi ama buda group by kısmına yazdığından başkasını select kısmına yazamıyorsun e benim tablomda biraz genis tüm verilere ihtiyacım var nasıl yapabilirim?
  • 23-10-2014, 13:31:12
    #2
    select * 
    from tbl 
    where id in (
    select MAX(id) from tbl group by groupid
    )
    dener misin?
  • 23-10-2014, 18:06:02
    #3
    bentayfun adlı üyeden alıntı: mesajı görüntüle
    select * 
    from tbl 
    where id in (
    select MAX(id) from tbl group by groupid
    )
    dener misin?

    Hocam ilgine teşekkür ederim bu kod group yapmadan tablodaki tüm sonuçları döndürüyor.

    Sql e ekstra bir yük getirmesine rağmen functionlarla çözdüm belki birinin işine yarar diye yazıyorum

    
    create function [dbo].[denemebul] (@grupid int) 
    returns varchar(150)
    as
    begin
    	declare @sonuc varchar(150) 
    	set @sonuc = (select top 1 icerik1 from tbl where grupid = @grupid order by Tarih desc) 
    	return @sonuc 
    end 
    
    
    create proc [dbo].[deneme1]
    as
    begin 
    	select grupid,
            dbo.denemebul (grupid) as id,	
    	dbo.denemebul2 (grupid) as icerik1,
    	dbo.denemebul1 (grupid) as icerik2,
    	dbo.denemebul3 (grupid) as icerik3,		
    	from tbl 		
    	group by grupid
    end
    Daha iyi bir kodu olan yazarsa sevinirim herkese iyi çalışmalar.