SQL ile tarih seçtirme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

SQL ile tarih seçtirme

Mesaj gönderen fduman »

Merhaba arkadaşlar, uzun süredir uğraştığım ve pek de bir sonuca ulaşamadığım bir problemi sizlere sormak istedim.

VT olarak FB 1.5 kullanıyorum.

PDKS için hazırladığım tablomda şu şekilde Vardiya tanımları mevcut basitleştirerek yazıyorum.

Kod: Tümünü seç

Vardiyalar tablosu
---------------------
ID : BIGINT
GIRIS_SAATI: TIME
CIKIS_SAATI:TIME
Bu vardiyaları kapsayan gruplar var. Gruplar birden fazla vardiyayı tek başlık altında toplamak için.

Kod: Tümünü seç

Gruplar Tablosu:
-------------------
GRUP_ID: BIGINT
VARDIYA_ID: BIGINT  <-- Burası vardiyalar tablosundan birer ID'ye bağlı
Benim yapmak istediğim şu. Gruplar tablosunda şu şekilde kayıtlar yeralsın. Örnekliyorum:

Kod: Tümünü seç

GRUP_ID                  VARDIYA_ID      GIRIS_SAATI     CIKIS_SAATI
--------------           ---------------     -----------------    ---------------
      1                        1                  08:00                 16:00
      1                        2                  16:00                 00:00
      1                        3                  00:00                 08:00
Ben bu grubu bir kişiye atama yaptım diyelim. Bu kişi eğer atıyorum 07:50-17:00 aralığında giriş/çıkış yapmışsa SQL bana 1. vardiyayı döndürmeli yani 08:00-16:00 aralığını. Eğer 17:30-02:00 aralığında çalışmışsa da 2. vardiyayı yani 16:00-00:00 aralığını döndürebilmeli. Ben size en ekstrem örnekleri veriyorum çünkü 08:10-15:30 gibi bir aralıkta girse bunu bulması hiç problem değil.

Bir ekstrem örnek daha vereyim: 15:00-17:00 aralığında girerse eğer ne olacak? :)

Çözümünde yardımcı olabilirseniz sevinirim. Benim kafam durdu artık. :)

Herkese iyi çalışmalar.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Merhaba.
İlişkisel veritabanı yönetiminde (gerçi sistematik kodlama için de aynı şeyi söylemişlerdi) "Böl-Parçala-Yönet" diye bi teknikten bahsederler (buna "İyileştirme" de diyorlar). Bu noktada yapılması gereken ise vardiya saatlerini de tam olarak tanımlamak.

Kod: Tümünü seç

Vardiya             Baş.Saati         Bit.Saati
------------------------------------------------
01                     08 : 00             15 : 00
02                     15 : 00             23 : 00
gibi..

Burada elimizdeki mevcut verileri bu vardiya tablosuyla değerlendirerek;


- Hangi vardiya saatlerine uyuyor?
- Vardiya saatlerine uymuyorsa firmanın bu durumda uyguladığı yönetmeliğe uygun hesaplama..

gibi bir istisnai durum eklemeniz sanırım çözüm olacaktır.

Kolay gelsin.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar Coder Lord'um :)

Farkınsdaysan sorduğun soru aslen programcılık sorusu değil !... Aslında yönetmeliği soruyorsun. Yani hangi firma için yazıyorsan bu programı, oradaki İK yönetmeliğine göre karar vermen gerekecek.

Ben olsam şöyle bir yöntem izlerdim.

1. Öncelikli giriş çıkış saatleri mevcut vardiya şablonlarıma uyuyor mu? Uyuyorsa problem yok !.. Uymuyor ise (yani o Query'den bir sonuç dönmezse) 2. Adımı uygularım
2. İstisnai durumlar
2.A Başlangıcı bir vardiyaya bitişi başka vardiyaya düşen kayıtlar
2.B Başlangıcı ve bitişi aynı vardiyaya (fakat ertesi güne düşen kayıtlar)

Şimdi istisnalara kurallar koyarak kapatmalar yapmalısın. Yani, Bir vardiya başlangıç saatinden itibaren 4 saat içinde yapılan her giriş, bu vardiyada sayılır, eğer başlangıcı 4 saati geçiyor ve bitişi bir sonraki vardiyaya düşüyor ise, bir sonraki vardiyaya aktarılır. (gibi bunları özel durumlar adı altında tek tek sorgulamalısın) Bu durumları da oturup, İK yöneticisi kim ise onunla tartışman ve sonuca ulaştırman gerekir.

Bilmem açıklayabildim mi :)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Sağolun arkadaşlar. Bu işin bir kurala bağlanması gerektiğini anladım ve önerdiğiniz şekilde, şablona uymayan vardiyalar için bir kural tanımlayarak çözdüm. (Umarım çözdüm :) ) Öyle bir SQL oldu ki, öyle böyle değil. Ben bile kayboluyorum içinde. :)
Cevapla