Yapmakta oldugum bir proje icin Tarih sorgusu ariyorum
Yapmakta oldugum bir proje icin Tarih sorgusu ariyorum
Merhabalar bir projem var ve bu projede bana kaydi tutulan dogum tarihlerinin
0-6ay
6-12 ay
1-2 yas
2-3 yas
3 yas ustu
olacak sekilde kac katdin oldugu sorgusu istenmekte bunu firebird de nasil sorgulattiririm fikri olan arkadaslara simdiden tesekkur ederim.
0-6ay
6-12 ay
1-2 yas
2-3 yas
3 yas ustu
olacak sekilde kac katdin oldugu sorgusu istenmekte bunu firebird de nasil sorgulattiririm fikri olan arkadaslara simdiden tesekkur ederim.
date fonksiyonlarında date-150 gibi istenilen tarihe dönmek mümkün. sen her yaş grubu için bir başlangıç ve bir bitiş tarihi oluşturacaksın.
Tarih1 = Date-150 ( 0-6 aylıklar)
Tarih2 = Tarih1-150 (6-12 aylıklar)
Tarih3 = Tarih2-365 (1-2 yaşlar)
Tarih4 = Tarih3-365 (2-3 yaşlar)
Tarih5 = Tarih4-360 (3 yaş ve üstü)
sonra sorgu içinde iki tarih aralığında WHERE TARIH IN[TARIH1,TARIH2] gibi istenilen iki tarih aralığındaki kayıtları Count(*) ile alabilirsin..
Kolay gelsin..
Tarih1 = Date-150 ( 0-6 aylıklar)
Tarih2 = Tarih1-150 (6-12 aylıklar)
Tarih3 = Tarih2-365 (1-2 yaşlar)
Tarih4 = Tarih3-365 (2-3 yaşlar)
Tarih5 = Tarih4-360 (3 yaş ve üstü)
sonra sorgu içinde iki tarih aralığında WHERE TARIH IN[TARIH1,TARIH2] gibi istenilen iki tarih aralığındaki kayıtları Count(*) ile alabilirsin..
Kolay gelsin..
Merhaba,
Bir UDF hazırladım. Kodlar ve kullanımı aşağıda. Temel mantık olarak, verilen 2 tarih arasındaki ay saısını buluyor ve senin gruplarına göre her gruba bir değer döndürüyor.
DelphiTurkiye.dpr kodu
untTarih.pas kodu
Kullanımı da şu şekilde, dogum_tarihi ve tablo_adi kısımlarını yapına göre değiştirirsin :
Sen yapına göre ufak tefek değişiklikler yaparsın.
Kolay gelsin.
Bir UDF hazırladım. Kodlar ve kullanımı aşağıda. Temel mantık olarak, verilen 2 tarih arasındaki ay saısını buluyor ve senin gruplarına göre her gruba bir değer döndürüyor.
DelphiTurkiye.dpr kodu
Kod: Tümünü seç
library DelphiTurkiye;
uses
SysUtils,
Classes,
untTarih in 'untTarih.pas';
{$R *.res}
exports
YasGrubu;
begin
end.
Kod: Tümünü seç
unit untTarih;
interface
uses SysUtils, DateUtils, Windows;
const
IBASE_DLL = 'gds32.dll';
type
Long = LongInt; // 32 bit signed
ULong = DWord; // 32 bit unsigned
TM = record
tm_sec : integer; // Saniye
tm_min : integer; // Dakika
tm_hour : integer; // Saat (0-23)
tm_mday : integer; // aydaki gün (1-31)
tm_mon : integer; // Ay (0-11)
tm_year : integer; // Yil (takvim yilindan 1900 eksiği)
tm_wday : integer; // Haftanın günü (0-6) Pazar = 0)
tm_yday : integer; // Yilin günü (0-365)
tm_isdst : integer; // 0 if daylight savings time is not in effect)
end;
PTM = ^TM;
ISC_TIMESTAMP = record
timestamp_date : Long;
timestamp_time : ULong;
end;
PISC_TIMESTAMP = ^ISC_TIMESTAMP;
function YasGrubu(var IlkTarih, IkinciTarih : Long):integer;stdcall;
implementation
procedure isc_encode_timestamp (tm_date : PTM; ib_date : PISC_TIMESTAMP);stdcall; external IBASE_DLL;
procedure isc_decode_timestamp (ib_date: PISC_TIMESTAMP; tm_date: PTM);stdcall; external IBASE_DLL;
procedure isc_decode_sql_date (var ib_date: Long; tm_date: PTM); stdcall; external IBASE_DLL;
procedure isc_encode_sql_date (tm_date: PTM; var ib_date: Long);stdcall; external IBASE_DLL;
procedure isc_decode_sql_time (var ib_date: ULong; tm_date: PTM);stdcall; external IBASE_DLL;
procedure isc_encode_sql_time (tm_date: PTM; var ib_date: ULong);stdcall; external IBASE_DLL
function YasGrubu(var IlkTarih, IkinciTarih : Long):integer;
var
tm_ilk, tm_ikinci : TM;
TempIlkTarih, TempIkinciTarih : TDateTime;
i : integer;
begin
Result := -1;
isc_decode_sql_date(IlkTarih, @tm_ilk);
isc_decode_sql_date(IkinciTarih, @tm_ikinci);
TempIlkTarih := EncodeDate(tm_ilk.tm_year + 1900, tm_ilk.tm_mon+1, tm_ilk.tm_mday);
TempIkinciTarih := EncodeDate(tm_ikinci.tm_year + 1900, tm_ikinci.tm_mon+1, tm_ikinci.tm_mday);
i := MonthsBetween(TempIlkTarih, TempIkinciTarih);
case i of
0..6 : Result := 1;
7..12 : Result := 2;
13..24 : Result := 3;
25..36 : Result := 4;
37..3000 : Result := 5;
else
Result := -1;
end;
end;
end.
Kod: Tümünü seç
select YasGrubu(current_date, dogum_tarihi) as grup, count(*)
from tablo_adi
group by YasGrubu(current_date, dogum_tarihi)
Kolay gelsin.