2009-06-17 10 views
1

Ich habe die folgende Abfrage in MSSQL:SQL durchschnittliche Zeit

select 
TRANSACTION_TYPE_ID 
,COUNT(TRANSACTION_TYPE_ID)AS NUMBER_OF_TRANSACTIONS 
,CAST(SUM(AMOUNT)AS DECIMAL (30,2)) AS TOTAL 
FROM 
    [ONLINE_TRANSACTION] 
WHERE CONVERT(CHAR(8), CREATED_ON, 114) >='17:30' AND AMOUNT IS NOT NULL AND  
TRANSACTION_TYPE_ID !='CHEQUE-STOP-TRANS-TYPE' 
GROUP BY TRANSACTION_TYPE_ID 
ORDER BY TRANSACTION_TYPE_ID 

ich die Art von Transaktionen TRANSATION_TYPE_ID wie über der Gesamtmenge jede Art von Transaktion wie oben, aber auch die durchschnittliche Zeit, diese Transaktionen zeigen will aufgetreten CREATED_ON was ist datetime Ich habe immer noch keinen guten Weg, dies zu tun?

Antwort

1

Ein Weg wäre, die Zeit in Sekunden umzuwandeln, den Durchschnitt zu berechnen und dann für das Ergebnis zurück in Stunden, Minuten und Sekunden zu konvertieren.

+0

gute Idee, ich bin der Art der Suche nach etwas Quellcode Zeiger dank Randolph – Andreas

3

Basierend auf Randolph Potters Antwort, können Sie die durchschnittliche Zeit finden wie:

avg(DATEPART(hh,created_on)*60 + DATEPART(mi,created_on)) % 24 as AvgHour, 
avg(DATEPART(hh,created_on)*60 + DATEPART(mi,created_on))/24 as AvgMinute 
+0

Ich fand diese Lösung als gut -> (stackoverflow.com/questions/529144/...) CONVERT (VARCHAR, CAST (AVG (CAST (CAST (LINKS (created_on, 12) als datetime) AS FLOAT)) ALS DATETIME), 114) + '0'AS AVARAGE_TIME Wenn ich beide Andomars antworte und die oben erwähnte, bekomme ich andere Ergebnisse. Das ist die richtige ? – Andreas

+0

Ich nahm created_on war eine Datetime-Spalte, aber dann links (created_on, 12) würde einen Syntaxfehler geben. Bitte bearbeiten Sie Ihre Frage und fügen Sie den Datentyp der Spalte mit einigen Beispielzeilen hinzu. – Andomar

+0

Das ist falsch. –

1

Wenn Ihr über die Tageszeit zu reden und nicht ein bestimmtes Datum zu erhalten suchen, dh. 5:32 statt 4. Januar 2012 5:32, könnte das unten helfen. Entschuldigung wegen der Obergrenzen, es ist die Art, wie ich SQL schreiben kann.

CONVERT(VARCHAR,AVG(DATEPART(HH,CREATED_ON)*60 + DATEPART(MI,CREATED_ON))/60) + ':' + 
CASE WHEN CONVERT(VARCHAR,AVG(DATEPART(HH,CREATED_ON)*60 + DATEPART(MI,CREATED_ON)) % 60) < 10 
    THEN '0'+CONVERT(VARCHAR,AVG(DATEPART(HH,CREATED_ON)*60 + DATEPART(MI,CREATED_ON)) % 60) 
    ELSE CONVERT(VARCHAR,AVG(DATEPART(HH,CREATED_ON)*60 + DATEPART(MI,CREATED_ON)) % 60) 
END AS AVG_CREATED_ON 
1
SELECT FROM_UNIXTIME((ROUND((UNIX_TIMESTAMP(floor(timestamp_column))/ 60),0) * 60)) rounded_time 
FROM mysql_table 
WHERE timestamp_column BETWEEN STR_TO_DATE('31/07/2012','%d/%m/%Y') 
AND STR_TO_DATE('01/08/2012','%d/%m/%Y') 
Verwandte Themen