Geht das mit einem SQL-Statement?

27/02/2008 - 21:02 von Chris Seidel | Report spam
Hallo,

ich habe eine Tabelle Dateistatus:

Datei-ID int
Status int
Statusànderung datetime

z.B.:

Datei-ID, Status, Statusànderung
1, 0, 01.01.2000 10:00:00
1, 1, 01.01.2000 10:05:00
1, 2, 01.01.2000 10:10:00
2, 0, 01.01.2000 10:01:00
2, 1, 01.01.2000 10:05:00
2, 2, 01.01.2000 10:13:00

Nun möchte ich für jede Datei wissen, wieviel Zeit zwischen Status 0 und
Status 2 vergangen ist, sodass das das Ergebnis wàre:

1, 10 min
2, 12 min

Geht das mit einem Statement?

Danke.
 

Lesen sie die antworten

#1 Elmar Boye
27/02/2008 - 21:43 | Warnen spam
Hallo Chris.

Chris Seidel schrieb:
ich habe eine Tabelle Dateistatus:

Datei-ID int
Status int
Statusànderung datetime

z.B.:

Datei-ID, Status, Statusànderung
1, 0, 01.01.2000 10:00:00
1, 1, 01.01.2000 10:05:00
1, 2, 01.01.2000 10:10:00
2, 0, 01.01.2000 10:01:00
2, 1, 01.01.2000 10:05:00
2, 2, 01.01.2000 10:13:00

Nun möchte ich für jede Datei wissen, wieviel Zeit zwischen Status 0 und
Status 2 vergangen ist, sodass das das Ergebnis wàre:

1, 10 min
2, 12 min

Geht das mit einem Statement?



Sicher in etwa so:

USE tempdb
GO
SET DATEFORMAT dmy
GO
DROP TABLE dbo.DateiStatus
GO

CREATE TABLE dbo.DateiStatus(
DateiId int NOT NULL,
Status int NOT NULL,
StatusÄnderung datetime NOT NULL)
GO

INSERT INTO dbo.DateiStatus (DateiId, Status, StatusÄnderung)
SELECT 1, 0, '01.01.2000 10:00:00'
UNION ALL SELECT 1, 1, '01.01.2000 10:05:00'
UNION ALL SELECT 1, 2, '01.01.2000 10:10:00'
UNION ALL SELECT 2, 0, '01.01.2000 10:01:00'
UNION ALL SELECT 2, 1, '01.01.2000 10:05:00'
UNION ALL SELECT 2, 2, '01.01.2000 10:13:00'
UNION ALL SELECT 3, 0, '01.01.2000 10:23:00'

GO

SELECT ds0.DateiID,
DATEDIFF(minute, ds0.StatusÄnderung, ds2.StatusÄnderung)
AS ÄnderungMinuten
FROM dbo.DateiStatus AS ds0
LEFT JOIN dbo.DateiStatus AS ds2
ON ds0.DateiID = ds2.DateiID
AND ds2.Status = 2
WHERE ds0.Status = 0
GO


Gruß
Elmar

Ähnliche fragen