Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
sql iki saatin toplamı
#1
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

Cevapla
#2
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
Cevapla
#3
(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.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Runtime ile SpinEdit toplamı alma denizfatihi 7 1.536 04-12-2024, Saat: 12:28
Son Yorum: yhackup
  Dbgrid sütun toplamı aldırmak stevenskat 15 4.347 17-08-2023, Saat: 18:04
Son Yorum: Mesut
  cxgrid sutun toplamı hatası (Çözüldü) cinarbil 0 2.277 23-02-2019, Saat: 15:53
Son Yorum: cinarbil



Konuyu Okuyanlar: 1 Ziyaretçi