Forum
Merhabalar,
Aşağıda örnek kaydı bulunan tablomda toplam çalışılmamış zamanı bulmak istiyorum fakat yapamadım,
Bilgisi olan arkadaşlardan yardım talep ediyorum.
Yapmak istediğim, isTakipId verisi değişkendir. ilgili isTakipId değerinde kaç kayıt varsa hesaplamadan sonra gün ve saat verisini almak istiyorum
Tabloda veriler herzaman Çalışmıyordan başlayacak Çalışıyor diye devam edecek sonra çalışmıyor eklenebilecek Boş yazanlar hesaplamaya dahil olmayacak
Özetle: 10 adet çalışmıyor ve çalışıyor arasındaki tarih ve saat verisinden sonra bu teknisyen bu işde 5 saat çalışmadı, yada bu teknisyen 1 gün 10 saat çalışmadı gibi bir veri almak istiyorum.
NOT: EĞER DAHA KOLAY HESAPLAMA YAPILACAK BAŞKA TABLO YAPISI VAR İSE TABLO YAPIMI DEĞİŞTİREBİLİRİM ÇALIŞMIYOR VE ÇALIŞIYOR DEĞERLERİNİ FARKLI TABLODA TUTABİLİRİM. GÜNÜN SONUNDA İLGİLİ İD DEKİ HESAPLAMAYI ALABİLECEĞİM BİR YAPIYA İHTİYACIM VAR
Biraz daha fazla datanın olduğu (en az 1000 satır olursa iyi olur.) gönderirsen sorgusunu göndereyim.
Merhaba Ömer bey,
İki gündür heycanla bir arkadaşın cevap vermesini bekliyordum. Cevabınız için çok teşekkür ederim.
Yaptığım yazılımda isTakipId ye göre işlem yapacağım için örnek bir kayıt ekledim DB ye daha fazla kayıt DB'de bulunmamaktadır. Eğer isTakipId ye göre örnekteki SQL sorgusunu gönderebilirseniz çok memnun olurum.
Yardımlarınız için çok teşekkür ederim.
iyi çalışmalar
Tuncay GÜVEN
Sanırım bu iş görür.
bu da sorgusu
--select * from calisma
--create table #t(id int,kkodu int, isTakipId int,teknisyenDurum varchar(100),teknisyenTarih datetime,oncekiId int,oncekidurum varchar(100),oncekiTarih datetime,calismaDurumu varchar(100),sure int)
truncate table #t
INSERT INTO #t (id,kkodu,isTakipId,teknisyenDurum,teknisyenTarih)
select id,kkodu,isTakipId,teknisyenDurum,teknisyenTarih from calisma
update #t set oncekiId=(select top 1 id from calisma where kkodu=#t.kkodu and isTakipId=#t.isTakipId and teknisyenTarih<#t.teknisyenTarih order by teknisyenTarih desc)
update #t set oncekiDurum=(select top 1 teknisyenDurum from calisma where kkodu=#t.kkodu and isTakipId=#t.isTakipId and teknisyenTarih<#t.teknisyenTarih order by teknisyenTarih desc)
update #t set oncekiTarih=(select top 1 teknisyenTarih from calisma where kkodu=#t.kkodu and isTakipId=#t.isTakipId and teknisyenTarih<#t.teknisyenTarih order by teknisyenTarih desc)
update #t set calismaDurumu='Çalışıldı' where teknisyenDurum='Çalışmıyor' and oncekiDurum='Çalışıyor'
update #t set calismaDurumu='Duruldu' where teknisyenDurum='Çalışıyor' and oncekiDurum='Çalışmıyor'
update #t set calismaDurumu='Boş' where teknisyenDurum='Boş'
update #t set calismaDurumu='Boş' where teknisyenDurum='Çalışmıyor' and oncekiDurum='Boş'
update #t set sure=datediff(minute,oncekitarih,teknisyentarih)
select * from #t
SELECT isTakipId,calismaDurumu,sum(sure) as sure_dk from #t
group by isTakipId,calismaDurumu
Merhaba Ömer bey,
Yardımlarınız için çok teşekkür ederim. Tam istediğim sonucu alıyorum Yanında Bonus olarak çalışan süreyi de göstermişsiniz.
Tekrardan teşekkürler
iyi çalışmalar
Tuncay GÜVEN