Kod: Tümünü seç
var
T1, T2:TDATE;
begin
With IBQuery1 do begin
Active := False;
SQL.Clear;
SQL.Add( 'select ADISOYADI, RUTBEKODU, SICILI, COUNT(*) as Toplam');
SQL.Add( 'from OLAYUZMAN');
SQL.Add( 'group by RUTBEKODU, SICILI, ADISOYADI' );
Active := True;
end;
iç select kaldırıldığında sonuç tüm kayıtlarda olmak üzere hemen dönüyor.
Kod: Tümünü seç
var
T1, T2:TDATE;
begin
With IBQuery1 do begin
Active := False;
SQL.Clear;
SQL.Add( 'select COUNT(ADISOYADI) as Toplam' );
SQL.Add( 'from OLAYUZMAN where INCTARIHI in' );
SQL.Add( '(select inctarihi from olayyeri1 where inctarihi BETWEEN :T1 AND :T2 )' );
SQL.Add( 'group by RUTBEKODU, SICILI, ADISOYADI' );
ParamByName( 'T1' ).AsDate:= jvdateedit1.Date;
ParamByName( 'T2' ).AsDate :=jvdateedit2.Date;
Active := True;
end;
bu şekli ile yani select te alanları vermez isem istenen sonuç dönüyor ama bir dakika yaklaşık sürüyor.
Kod: Tümünü seç
var
T1, T2:TDATE;
begin
With IBQuery1 do begin
Active := False;
SQL.Clear;
SQL.Add( 'select COUNT(ADISOYADI) as Toplam' );
SQL.Add( 'from OLAYUZMAN where INCTARIHI in' );
SQL.Add( '(select inctarihi from olayyeri1 where inctarihi BETWEEN :T1 AND :T2 )' );
ParamByName( 'T1' ).AsDate:= jvdateedit1.Date;
ParamByName( 'T2' ).AsDate :=jvdateedit2.Date;
Active := True;
end;
bu şekil sonuç yaklaşık bir dakikada dönüyor ve toplam bütün olarak dönüyor.
Sanırım iç select işi uzatıyor. left join ile işlemi mantık olarak önce birleştirip sonra tarihler arasında sorgulama yapmak mı? ve bu join ile birleşen tabloları memtabloyamı almalıyım yoksa query zaten bunu aklında tutuyor ve kendi içinde tekrar tarihler arası sorgulayıp sonuç mu döndürüyor.
teşekkür ve saygılarımla kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.
