2009-08-25 22 views
8

Ben bu biçimde tarih-saat değerleri içeren bir tablo vardır:MySQL - SUM kez nasıl?

BAŞLANGIÇ

1/13/2009 7:00:00 AM

END

1/13/2008 2:57:00 PM

Bunları bir tarih-saat biçimine dönüştürmek için 'str to date' işlevini kullanıyorum.

Aralarındaki farkı nasıl hesaplarım? Ve sonra hepsini toplam saatlerde gösterecek şekilde topla (yani, haftanın toplam saati 40:53).

Zaman ayarı işlevini deniyordum ama sonuçlar toplamı değil.

cevap

4

UNIX_TIMESTAMP ve SEC_TO_TIME içine bakarak deneyin.

Ardından saati almak için (milisaniye cinsinden olacaktır) bu değeri kullanın damgaları arasındaki farkları özetlemek istiyoruz:

SELECT SEC_TO_TIME(time_milis/1000) 
FROM (
    SELECT SUM(UNIX_TIMESTAMP(date1) - UNIX_TIMESTAMP(date2)) as time_milis 
    FROM table 
) 
+0

Teşekkürler - Tarih zaman dizelerini saniyeler olarak dönüştürdüm - Farkı hesapladı - ve sonra saniye geri saat-dakikaya dönüştürdü. –

+0

Düzeltme - time_to_sec işlevi, tarih bölümü için geçerli değildir - yalnızca zaman kısmı - bu nedenle, 2009-08-25 01:06:00 eksi 2009-08-24 15:35:00, negatif bir sayı ile sonuçlanır. Zamanlamalı fonksiyonu kullanmam gerekecek. –

6

Kontrol dışarı Şunu da deneyebilirsiniz MySQL DateDiff Function

SELECT SUM(DATEDIFF(endtime, starttime)) 
FROM somerecordstable 
WHERE starttime > '[some date]' AND endtime <= '[some date]' 

:

SELECT SUM(TIMEDIFF(endtime, starttime)) 
FROM somerecordstable 
WHERE starttime > '[some date]' AND endtime <= '[some date]' 

Ben ikincisini test etmedim ama ilk çalışması gerekir biliyorum.

+0

Bu doğru bir fikir olduğunu, ancak size gün içinde bir cevap verecekti ... bu kodu kullanmak zorunda düşünüyorum. Bazı çarpımlar yapmalı veya saatlere dönüştürmek için başka bir tarih işlevi kullanmalısınız: dakika –

+0

Teşekkürler - belirli bir hafta boyunca çalışanların toplam çalışma süresini bulmak için ihtiyaç duyduğu saatler olması gerekir. –

+0

verdiğim ikinci örnek size doğru cevabı vermelidir – Jason

1
SELECT some_grouping_column, SUM(TIMEDIFF(datecol1,datecol2)) as tot_time 
FROM my_table 
GROUP BY some_grouping_column; 
+0

Sonuç dakikalar içinde geri döndü mü? –

+0

döndürür hh: mm: ss http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff – dnagirl

40

bunun işe yaradığını :)

SELECT 
    SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) AS total_time 
FROM time_table; 
+0

Bunu MySQL içinde yaptığımda, bir LIMP tablosu oluşturmam gerekti (alt sorgu ile), çünkü LIMIT aksi halde çalışmaz: 'sec_to_time (sum (sn)) sec (TIME_TO_SEC (TIMEDIFF (son_time, start_time) sec) secs rezervasyon emriyle sınırlama sınırı 10) t; 'Tuhaf. – Rudie