MS SQL GROUP BY + czas

0

Witam !

Mam taki problem i w sumie nie wiem co z nim zrobić ponieważ moja znajomość sql-a ogranicza się do podstaw :/

Próbuje sobie pobrać tabelkę taką procedurą:


ALTER PROCEDURE [dbo].[PobierzCzas]
	@UserID2 int,
	@DataStart DateTime,
	@DataKoniec DateTime
AS
SELECT rcp_uzytkownicy.Imie,rcp_uzytkownicy.Nazwisko,dbo.FixDate(rcp_zdarzenia.Czas_Start) AS 'Data Zdarzenia',

        CONVERT(time, DATEADD(ss, DATEDIFF(ss, rcp_zdarzenia.Czas_Start, rcp_zdarzenia.Czas_Koniec),0),108)
        AS [Czas (hh:mm)]

FROM    rcp_zdarzenia INNER JOIN rcp_uzytkownicy
		ON rcp_zdarzenia.ID_User = rcp_uzytkownicy.ID
WHERE ID_User = @UserID2 AND rcp_zdarzenia.Czas_Start BETWEEN @DataStart AND @DataKoniec
GROUP BY rcp_zdarzenia.ID_User,rcp_uzytkownicy.Imie,rcp_uzytkownicy.Nazwisko,dbo.FixDate(rcp_zdarzenia.Czas_Start),    
        CONVERT(time, DATEADD(ss, DATEDIFF(ss, rcp_zdarzenia.Czas_Start, rcp_zdarzenia.Czas_Koniec),0),108)


I to co mi wychodzi to coś takiego:

Imie Nazwisko Data Zdarzenia Czas (hh:mm)
Łukasz B. 2010-04-21 0000.000 0000.0000000
Łukasz B. 2010-04-21 0000.000 0000.0000000
Łukasz B. 2010-04-21 0000.000 0000.0000000
Łukasz B. 2010-04-21 0000.000 0000.0000000
Łukasz B. 2010-04-21 0000.000 0100.0000000
Łukasz B. 2010-04-21 0000.000 2200.0000000
Łukasz B. 2010-04-23 0000.000 0000.0000000
Łukasz B. 2010-05-15 0000.000 0100.0000000
Łukasz B. 2010-08-09 0000.000 0000.0000000
Łukasz B. 2010-08-09 0000.000 0200.0000000
Łukasz B. 2010-08-09 0000.000 0600.0000000
Łukasz B. 2010-09-09 0000.000 0000.0000000
Łukasz B. 2010-09-09 0000.000 0500.0000000

No i problem jest tego typu, że potrzebuje to zgrupować tak aby czas dla danego dnia był sumą czasów szczątkowych np:

Łukasz B. 2010-04-21 0000.000 2300.0000000
Łukasz B. 2010-04-23 0000.000 0000.0000000

i w sumie nie wiem co mam dalej z tym począć :/

Z drugiej jednak strony udaje mi się to ale przy rozdzieleniu godzin i minut czego wolałbym uniknąć:

ALTER PROCEDURE [dbo].[PobierzCzas]
	@UserID2 int,
	@DataStart DateTime,
	@DataKoniec DateTime
	

AS

SELECT rcp_uzytkownicy.Imie,rcp_uzytkownicy.Nazwisko,dbo.FixDate(rcp_zdarzenia.Czas_Start) AS 'Data Zdarzenia',
 
CONVERT(int,SUM(ABS(DateDiff(MINUTE,rcp_zdarzenia.Czas_Start,rcp_zdarzenia.Czas_Koniec))))/60 AS 'H',
CONVERT(int,SUM(ABS(DateDiff(MINUTE,rcp_zdarzenia.Czas_Start,rcp_zdarzenia.Czas_Koniec))))%60 AS 'Min'

FROM    rcp_zdarzenia INNER JOIN rcp_uzytkownicy
		ON rcp_zdarzenia.ID_User = rcp_uzytkownicy.ID
WHERE ID_User = @UserID2 AND rcp_zdarzenia.Czas_Start BETWEEN @DataStart AND @DataKoniec
GROUP BY rcp_zdarzenia.ID_User,rcp_uzytkownicy.Imie,rcp_uzytkownicy.Nazwisko,dbo.FixDate(rcp_zdarzenia.Czas_Start)    
        --CONVERT(time, DATEADD(ss, DATEDIFF(ss, rcp_zdarzenia.Czas_Start, rcp_zdarzenia.Czas_Koniec),0),108) --use the LEFT,5 to drop the seconds portion, otherwise remove if hh:mm:ss is okay


0

No i się udało dzięki za pomoc :P

LEFT(
CONVERT(time,
CONVERT(varchar,
(CONVERT(varchar,SUM(ABS(DateDiff(MINUTE,rcp_zdarzenia.Czas_Start,rcp_zdarzenia.Czas_Koniec)))/60) 
+ ':' +
CONVERT(varchar,SUM(ABS(DateDiff(MINUTE,rcp_zdarzenia.Czas_Start,rcp_zdarzenia.Czas_Koniec)))%60))),108),5)
AS [Czas łączny (hh:mm)]

1 użytkowników online, w tym zalogowanych: 0, gości: 1