olayı su sekilde izah etmeye calısayım
bas_saat ve bit_saat isimli iki TIME alanım var
tabloda baska bir alana gore gruplama yaparak ben bu saatler arasındaki farkın toplamını istiyorum
yani
select teknisyen,sum(saatfarkı) from servis
group by teknisyen
saatfarkı diye bir procedure yazdım lakin cozum olmadı
group kullanmadan farkı hesaplatabiliyorum.
select teknisyen,(select donen from saatfarki(bas_saat,bit_saat)) from servis
simdi grouplayarak nasıl bu islemi yapacagım.
baska bir alternatif Computed Field kullanmak ama saatfarkı islemi
bit_saat-bas_saat seklinde basit bir sey degil
22:00 de baslayıp 01:00 de biten servis aslında 3:00 surmustur
bunu eger mumkunse Computed By ile nasıl yapabilirim (pek mumkun degil gibi ama...)
Gruplayarak saat farkı hesabı
Gruplayarak saat farkı hesabı
ÜŞENME,ERTELEME,VAZGEÇME
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Firebird için;
Buradan dönen değer saniye cinsinden gelecektir. Muhtemelen delphi içinde düzgün dönüştürülür gelen sonuç.
Firebird için;
Kod: Tümünü seç
select teknisyen_id,sum(case when endtime < starttime then endtime - starttime + 86400 else endtime - starttime end) from teknisyen group by teknisyen_id
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kod: Tümünü seç
sum(BIT_SAAT - BAS_SAAT)/3600 from SERVIS group by TEKNISYEN
o tablodaki personelin toplam saat farkını veriyor.
Gün bazında alınacaksa group by a tarih eklemeli.
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Kolay gelsin,
Verdiğiniz kodda şayet BIT_SAAT 01:00:00 BAS_SAAT:23:00 olursa çalışan kişinin 23 saat çalıştığı sonucu çıkacaktır. Logic bir hata olduğundan farkedilmesi için birilerinin gece çalışıp bu durumu oluşturması gerekir. Mesai saatleri 08-17 olan bir yerde bu sorun oluşmazken gece vardiyası olan bir yerde sorun çıkacaktır.onaydin yazdı:Kod: Tümünü seç
sum(BIT_SAAT - BAS_SAAT)/3600 from SERVIS group by TEKNISYEN
o tablodaki personelin toplam saat farkını veriyor.
Gün bazında alınacaksa group by a tarih eklemeli.
Kolay gelsin,
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
en saglam yol donus degeri time olan bir dll fonksiyonu hazırlamak
ama su sekilde de is goruyor.
ama su sekilde de is goruyor.
Kod: Tümünü seç
CAST(SUM(CASE WHEN X.BIT_SAAT < X.BAS_SAAT THEN X.BIT_SAAT - X.BAS_SAAT + 86400 ELSE X.BIT_SAAT - X.BAS_SAAT END)/3600 AS INTEGER)
ÜŞENME,ERTELEME,VAZGEÇME