MS SQL Sorgu(Query) Yardım !!!

kumandan11

Üye
Katılım
4 Ağu 2013
Mesajlar
26
Puanları
1
Amaç işe gelmeyen kişilerin gösterilmesi

İki adet tablom var bunlar Personel_Devamlılık ve RFID_User
Namevarchar(100)
IDvarchar(50)
Giriş_Tarihidate
Giriş_Saatitime(0)
Giriş_Durumuvarchar(50)
Çıkış_Tarihidate
Çıkış_Saatitime(0)
Çıkış_Durumuvarchar(50)

RFID_User 'den sadece Name ve ID bilgilerini alıyorum.

3 Vardiya sistemi mevcut : 00:00-08:00, 08:00 - 16:00 , 16:00 - 00:00

Gelen kişileri bulmak için kullandığım sorgu:
Kod:
SELECT * FROM Personel_Devamlılık WHERE Giriş_Tarihi =CONVERT(date,getdate()) or (Giriş_Saati >= '22:00:00' and Çıkış_Tarihi =CONVERT(date,getdate())) order by Giriş_Saati desc

Toplam personel: 69
Sonuç: 40 tane gelen kişi görüyorum. Gelen vardiyalar 00:00-08:00, 08:00-16:00 ve 08:00-18:00 Sorun yok doğru sonuç

Gelmeyen kişileri bulmak için kullandığım sorgu:

Kod:
 select d.[Giriş_Tarihi], d.[Çıkış_Tarihi], e.[ID], e.[Name]
from (select distinct [Giriş_Tarihi]=CONVERT(date,getdate()), [Çıkış_Tarihi]=CONVERT(date,getdate()) from [Personel_Takip].[dbo].[Personel_Devamlılık]) d
cross join [Personel_Takip].[dbo].[RFID_User] e
left join [Personel_Takip].[dbo].[Personel_Devamlılık] a on (a.[Giriş_Tarihi] = d.[Giriş_Tarihi] and a.[ID] = e.[ID]) or (a.[Çıkış_Tarihi] = d.[Çıkış_Tarihi] and a.[ID] = e.[ID] )
where a.[ID] is null
group by d.[Giriş_Tarihi],d.[Çıkış_Tarihi], e.[ID],e.[Name]

Sonuç: 22 Personel görüyorum. Doğru sonuç 29 olmalıydı. Aşağıdaki tabloda bulunan vardiyadaki çıkış saati 00:02:21 olan personeli de gelmiş gibi gösteriyor. Bunu nasıl engelleyebilirim.

Gelmeyen kişileri bulmak için kullandığım sorgu aşağıdaki tabloda bulunan tarih ve saatteki veriyide gelmiş gibi gösteriyor. Ama bu önceki günün vardiyası. Ben onlarında gelmemiş gibi gözükmesini istiyorum. Soruguyu düzenlememe yardım edermisiniz.

NameIDGiriş_TarihiGiriş_SaatiGiriş_DurumuÇıkış_TarihiÇıkış_SaatiÇıkış_Durumu
İSİMCERA5454521.07.202315:55:05GİRİŞ22.07.202300:02:21ÇIKIŞ

Şimdide Yardımlarınız için teşekkür ederim.
 
Stackoverflow sitesi sağ olsun cevabımı aldım. Cevabı burada paylaşıyorum.

Kod:
DECLARE @Today DATE = CONVERT(DATE, GETDATE());
DECLARE @Shift1Start TIME = '00:00:00';
DECLARE @Shift1End TIME = '08:00:00';
DECLARE @Shift2Start TIME = '08:00:00';
DECLARE @Shift2End TIME = '16:00:00';
DECLARE @Shift3Start TIME = '16:00:00';
DECLARE @Shift3End TIME = '23:59:59';

SELECT
    e.[ID],
    e.[Name],
    @Today AS [In_Date],
    NULL AS [Out_Date]
FROM
    [personnel_tracking].[dbo].[RFID_User] e
WHERE
    e.[ID] NOT IN (
        SELECT DISTINCT
            a.[ID]
        FROM
            [personnel_tracking].[dbo].[Attendance_Employees] a
        WHERE
            (a.[In_Date] = @Today AND a.[In_Time] BETWEEN @Shift1Start AND
@Shift2End)
            OR
            (a.[Out_Date] = @Today AND ((a.[Out_Time] BETWEEN @Shift1Start AND
@Shift2End) OR (a.[Out_Time] >= @Shift3Start)))
    );
 

Forum istatistikleri

Konular
129,806
Mesajlar
930,281
Kullanıcılar
452,608
Son üye
murat620

Yeni konular

Çevrimiçi üyeler

Geri
Üst