2016-04-01 8 views
0

Ich muss bestimmte Spaltentransaktionen pro Sekunde für jede Sekunde anzeigen.Transaktionen pro Sekunde

Die folgende Abfrage funktioniert für jede Minute.

Select DISTINCT column1 AS Event, Count(column1) AS count, 
DateAdd(MINUTE, DateDiff(MINUTE, 0, [dateTimeColumn]), 0) as Time 
From table 
    Group By column1 ,DateAdd(MINUTE, DateDiff(MINUTE, 0, [dateTimeColumn]), 0) 

Testdaten wie folgt:

Event Time 
A  21:01:01 
A  21:01:02 
A  21:02:01 

Dies führt als

Event Count Time 
A   2  21:01 
A   1  21:02 

Die Ergebnisse sollten

Event Count Time 
A   1  21:01:01 
A   1  21:01:02 
A   1  21:02:01 

Aber ich muss jetzt die Transaktionen in Sekunden Ebene pro Sekunde statt Minute. Wenn ich DateDiff (Second ...) gebe, gibt es einen Fehler als Date-Overflow-Fehler.

Bitte vorschlagen

+2

Verwenden Sie ein neueres Datum wie '2000-01-01' anstelle von' 0', um einen numerischen Überlauf zu vermeiden – dnoeth

+0

Sie beziehen sich auf "dateTimeColumn", aber in Ihren Testdaten zeigen Sie nur "Zeit" an. Was ist die tatsächliche Tabellenstruktur? –

Antwort

1

dies stattdessen versuchen:

;WITH CTE_MinTime AS (SELECT MIN(dateTimeColumn) AS min_time FROM Table) 
SELECT 
    T.column1 AS Event, 
    COUNT(*) AS [count], 
    DATEADD(SECOND, DATEDIFF(SECOND, MT.min_time, T.dateTimeColumn), MT.min_time) AS [Time] 
FROM 
    CTE_MinTime MT 
CROSS JOIN Table T 
GROUP BY 
    T.column1, 
    DATEADD(SECOND, DATEDIFF(SECOND, MT.min_time, T.dateTimeColumn), MT.min_time) 

Das Problem ist, dass, wenn Sie die DATEDIFF tun es Sekunden vom 1900-01-01 zählt schon, was für den Standard zu groß für eine Zahl ist Datentyp.

Verwandte Themen