Delphi Can

Orjinalini görmek için tıklayınız: sql iki saatin toplamı
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba,

aşağıdaki kod ile sofor saat toplamlarını alıyorum, toplanan alanların ise toplamını almak istiyorum,

eğer 24 saat olursa aşağıdaki sorgu ile topluyor fakat 24 saati geçerse toplamıyor nasıl yapabilirim teşekkürler


 
dateadd(second,datediff(second,0,CalismaSaati),BeklemeSaati) as Toplam




 
 SELECT SOFOR,

  
CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) / 
3600),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) 
% 3600 / 60),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) 
% 3600 % 60),'00') as varchar(max)) as Bekleme,

CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) / 
3600),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) % 
3600 / 60),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) % 
3600 % 60),'00') as varchar(max)) as Calisma 
 
    
FROM TSoforHaraket   

GROUP BY SOFOR

 
 SELECT SOFOR,

  
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) / 3600),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) % 3600 / 60),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) % 3600 % 60),'00') as varchar(max)) as BeklemeSaati,


CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) / 3600),'00') as varchar(max)) + ':' + 
CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) % 3600 / 60),'00') as varchar(max)) + ':' + 
CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) % 3600 % 60),'00') as varchar(max)) as CalismaSaati, 


 CAST(
    FORMAT(
  (SUM(
      ( (DATEPART("ss",BeklemeSaati) + DATEPART("ss",CalismaSaati))
  + (DATEPART("mi",BeklemeSaati) + DATEPART("mi",CalismaSaati)) * 60 
  + (DATEPART("hh",BeklemeSaati) + DATEPART("hh",CalismaSaati)) * 3600)) / 3600),'00') as varchar(max))  + ':' + 

  
 CAST(FORMAT((SUM((
 
 DATEPART("ss",BeklemeSaati) + DATEPART("ss",CalismaSaati) + 
 (DATEPART("mi",BeklemeSaati) + DATEPART("mi",CalismaSaati)) * 60 + 
 (DATEPART("hh",BeklemeSaati) + DATEPART("ss",CalismaSaati)) * 3600)) % 3600 / 60),'00') as varchar(max)) + ':' + 
  
  
  
 CAST(FORMAT((SUM((
 DATEPART("ss",BeklemeSaati) + DATEPART("ss",CalismaSaati) + 
 (DATEPART("mi",BeklemeSaati) + DATEPART("mi",CalismaSaati)) * 60 + 
 (DATEPART("hh",BeklemeSaati)+ DATEPART("hh",CalismaSaati))  * 3600)) % 3600 % 60),'00') as varchar(max))
  
  
   as Toplam
  
   

FROM TSoforHaraket   

GROUP BY SOFOR

Merhaba 
Sorunuz net olamamakla beraber yazdıgınız kod tekrarlar ıcerıyor anlasılması ve okunurlugu malesef yok.
Anladıgım kadarıyla şöförlerın calısma surelerı ıle bekleme surelerını toplamak ıstıyorsunuz?
Yazdıgınız BeklemeSaati ve CalismaSaati alanları sadece zamansal  bilgi içeriyor. Zaman farkı bılgısı içermiyor.
Sıralı bır mantıkmı kurdunuz? yanı söför 8:00 da başladı 10:05 de bekledi, sonra 10:50 de çalıstı 11:40 da bekledi.  gibi......
 
Biraz daha açarsanız seve seve yardımcı oluruz
(02-01-2021, Saat: 22:13)erdogan Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba,

aşağıdaki kod ile sofor saat toplamlarını alıyorum, toplanan alanların ise toplamını almak istiyorum,

eğer 24 saat olursa aşağıdaki sorgu ile topluyor fakat 24 saati geçerse toplamıyor nasıl yapabilirim teşekkürler


 
dateadd(second,datediff(second,0,CalismaSaati),BeklemeSaati) as Toplam




 
 SELECT SOFOR,

  
CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) / 
3600),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) 
% 3600 / 60),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) 
% 3600 % 60),'00') as varchar(max)) as Bekleme,

CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) / 
3600),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) % 
3600 / 60),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) % 
3600 % 60),'00') as varchar(max)) as Calisma 
 
    
FROM TSoforHaraket   

GROUP BY SOFOR

 
 SELECT SOFOR,

  
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) / 3600),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) % 3600 / 60),'00') as varchar(max)) + ':' + 
 CAST(FORMAT((SUM((DATEPART("ss",BeklemeSaati) + DATEPART("mi",BeklemeSaati) * 60 + DATEPART("hh",BeklemeSaati) * 3600)) % 3600 % 60),'00') as varchar(max)) as BeklemeSaati,


CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) / 3600),'00') as varchar(max)) + ':' + 
CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) % 3600 / 60),'00') as varchar(max)) + ':' + 
CAST(FORMAT((SUM((DATEPART("ss",CalismaSaati) + DATEPART("mi",CalismaSaati) * 60 + DATEPART("hh",CalismaSaati) * 3600)) % 3600 % 60),'00') as varchar(max)) as CalismaSaati, 


 CAST(
    FORMAT(
  (SUM(
      ( (DATEPART("ss",BeklemeSaati) + DATEPART("ss",CalismaSaati))
  + (DATEPART("mi",BeklemeSaati) + DATEPART("mi",CalismaSaati)) * 60 
  + (DATEPART("hh",BeklemeSaati) + DATEPART("hh",CalismaSaati)) * 3600)) / 3600),'00') as varchar(max))  + ':' + 

  
 CAST(FORMAT((SUM((
 
 DATEPART("ss",BeklemeSaati) + DATEPART("ss",CalismaSaati) + 
 (DATEPART("mi",BeklemeSaati) + DATEPART("mi",CalismaSaati)) * 60 + 
 (DATEPART("hh",BeklemeSaati) + DATEPART("ss",CalismaSaati)) * 3600)) % 3600 / 60),'00') as varchar(max)) + ':' + 
  
  
  
 CAST(FORMAT((SUM((
 DATEPART("ss",BeklemeSaati) + DATEPART("ss",CalismaSaati) + 
 (DATEPART("mi",BeklemeSaati) + DATEPART("mi",CalismaSaati)) * 60 + 
 (DATEPART("hh",BeklemeSaati)+ DATEPART("hh",CalismaSaati))  * 3600)) % 3600 % 60),'00') as varchar(max))
  
  
   as Toplam
  
   

FROM TSoforHaraket   

GROUP BY SOFOR


Merhabalar,

Örneği denermisiniz lütfen.
http://sqlfiddle.com/#!18/4e739/4



Kodlar;
create table deneme (id int ,saat time);

insert into deneme (id, saat) values (1,'00:15:15');
insert into deneme (id, saat) values (1,'01:15:15');
insert into deneme (id, saat) values (1,'02:15:15');
insert into deneme (id, saat) values (1,'03:15:15');
insert into deneme (id, saat) values (1,'04:15:15');
insert into deneme (id, saat) values (1,'05:15:15');
insert into deneme (id, saat) values (1,'06:15:15');
insert into deneme (id, saat) values (1,'07:15:15');
insert into deneme (id, saat) values (1,'08:15:15');
insert into deneme (id, saat) values (1,'09:15:15');
insert into deneme (id, saat) values (1,'10:15:15');
insert into deneme (id, saat) values (1,'11:15:15');
insert into deneme (id, saat) values (1,'12:15:15');

select cast(sum(datediff(second,0,saat))/3600 as varchar(12)) + ':' +
right('0' + cast(sum(datediff(second,0,saat))/60%60 as varchar(2)),2) +
':' + right('0' + cast(sum(datediff(second,0,saat))%60 as varchar(2)),2) as total
FROM deneme;

Sonuç : 81:18:15

Umarım yardımcı olur.

Kolay gelsin.