2017-12-15 12 views
0

Hallo Ich hoffe, Sie können mir helfen, ich habe ein paar Tabellen beigetreten, um die richtige Liste von Informationen zu bekommen, die ich brauche. jetzt bin ich auf eine letzte Sache fest. Ich muss die Stunden aus dem Enddatum/der Endzeit in einer Zeile und einer Spalte und das Startdatum/die Startzeit aus einer anderen Zeile in einer anderen Spalte finden.Zeit zwischen zwei Daten in zwei verschiedenen Zeilen aus zwei verschiedenen Spalten finden

------------------------------------------------- 
 
ID Name Startdate \t \t EndDate 
 
------------------------------------------------- 
 
1 BILL \t 2017-10-10 09:00 \t 2017-10-10 19:00 
 
1 BILL \t 2017-10-11 09:00 \t 2017-10-11 19:00 
 
1 BILL \t 2017-10-15 09:00 \t 2017-10-15 15:00 
 
1 BILL \t 2017-10-22 09:00 \t 2017-10-22 11:00 
 
2 TOM \t 2017-10-10 09:00 \t 2017-10-10 14:00 
 
2 TOM \t 2017-10-12 09:00 \t 2017-10-12 16:00 
 
3 SAM \t 2017-10-13 09:00 \t 2017-10-13 20:00 
 
3 SAM \t 2017-10-14 09:00 \t 2017-10-14 19:00 
 
------------------------------------------------- 
 

 
-------------------------------------------------------------------- 
 
ID Name Startdate \t \t EndDate \t \t \t Hours Diff 
 
-------------------------------------------------------------------- 
 
1 BILL \t 2017-10-10 09:00 \t 2017-10-10 19:00 \t NULL 
 
1 BILL \t 2017-10-11 09:00 \t 2017-10-11 19:00 \t 14 
 
1 BILL \t 2017-10-15 09:00 \t 2017-10-15 15:00 \t 86 
 
1 BILL \t 2017-10-22 09:00 \t 2017-10-22 11:00 \t 162 
 
2 TOM \t 2017-10-10 09:00 \t 2017-10-10 14:00 \t NULL 
 
2 TOM \t 2017-10-12 09:00 \t 2017-10-12 16:00 \t 43 
 
3 SAM \t 2017-10-13 09:00 \t 2017-10-13 20:00 \t NULL 
 
3 SAM \t 2017-10-14 09:00 \t 2017-10-14 19:00 \t 13 
 
--------------------------------------------------------------------

SELECT 
 
a.ID 
 
,b.FirstName 
 
,b.LastName 
 
,c.StartTime 
 
,c.EndTime 
 

 
from 
 
table1 as a 
 
inner join table2 as b on a.idnumber = b.idnumber 
 
left join table3 as c on a.idnumber = c.idnumber 
 

 
where 
 

 
((Select Count(idnumber) as expr1 
 
From table1 as ab 
 
where idnumber = a.idnumber))<=1) 
 

 
Order by a.idnumber

Nachdem es in SQL getan wäre gut, aber auch, wenn es einfacher ist anstelle von SQL in SSRS in einem Ausdruck zu tun, wie dies gesetzt wird in einen Bericht, der großartig wäre.

Jede Hilfe wäre toll, ich bin sicher, es ist einfach nur Probleme zu haben. Danke.

+0

Verwenden Sie datediff() und halten Sie das Intervall als Stunden – Ajay

Antwort

0

Für diesen einfachen Fall können Sie verwenden:

select id, name, startdate, enddate, 
    DATEDIFF(hh, (
    select MAX(enddate) 
    from Table1 as T2 
    where T1.id = T2.id 
    and T1.startdate > T2.enddate), startdate) 
    as [Hours Diff] 
from table1 as T1 
order by id, startdate 

Es ist ein funktionierendes Beispiel hier: http://sqlfiddle.com/#!6/95827/8

0

Sind die Zeilen, die Sie vergleichen, um fehlen? Row2 enddate vs Row1 startdate Row3 enddate vs Row2 startdate etc ...

Wenn dies der Fall ist, dass Sie eine „Verzögerung“ Funktion können Sie aus einer anderen Zeile in die aktuelle Zeile in den Werten bringen, die sein wird, verglichen.

Ich habe so etwas wie dies mit Turophile Code:

select 
    id, 
    name, 
    startdate, 
    enddate, 
datediff(hh,lag(startdate)over(partition by name order by startdate 
asc),enddate) 

from 
    table1 as T1 
order by id, startdate 
+0

Tha Sie, aus irgendeinem Grund, funktioniert die LAG nicht für mich, aber das wird in der Zukunft helfen. Vielen Dank – ahope

0

Verwendung LAG() -bis bisherigen Rekorddaten und DATEDIFF zu erhalten - das Datum/Stunde Differenz

SELECT ID,Name ,Startdate,EndDate, 
     DATEDIFF(HOUR, 
        LAG(EndDate) OVER(PARTITION BY ID ORDER BY Startdate), 
       Startdate) AS Hours_Diff 
FROM TABLE1 
ORDER BY ID,Startdate 

Ergebnis zu erhalten: -

ID Name Startdate   EndDate    Hours_Diff 

1 BILL 2017-10-10 09:00 2017-10-10 19:00 NULL 
1 BILL 2017-10-11 09:00 2017-10-11 19:00 14 
1 BILL 2017-10-15 09:00 2017-10-15 15:00 86 
1 BILL 2017-10-22 09:00 2017-10-22 11:00 162 
2 TOM  2017-10-10 09:00 2017-10-10 14:00 NULL 
2 TOM  2017-10-12 09:00 2017-10-12 16:00 43 
3 SAM  2017-10-13 09:00 2017-10-13 20:00 NULL 
3 SAM  2017-10-14 09:00 2017-10-14 19:00 13 
Verwandte Themen