2016-09-30 3 views
1

Ich arbeite mit einem großen Datensatz, den ich innerhalb eines bestimmten Zeitfensters zusammenführen muss.
Zum Beispiel einiger Zeilen aus dem Datensatz:So gruppieren Sie die Zeit nach Sekunden (MS Access) - Conflation

symbol LAST_TRADE_TIME  CUR BID  OFFER VOLUME 
DBK  2010-12-05 11:34:57 38 37.99 38  0 
DBK  2010-12-05 11:34:57 38 37.99 38  0 
DBK  2010-12-05 11:34:57 38 37.99 38  100 
DBK  2010-12-05 11:34:58 38 37.99 38.005 0 

Was ich beabsichtige, eine kleine Anzahl von Zeilen (Zeitscheiben) zu tun abrufen. Jeder von ihnen stellen eine Periode von 300 Sekunden:

SELECT Min(LAST_TRADE_TIME) AS ConflatedDate, Min(CUR) 
FROM MYTABLE 
GROUP BY DateDiff("s",@StartDate,LAST_TRADE_TIME)/300; 

Ich sollte ein Datum erhalten und eine CUR alle 300 Sekunden

Wenn die Verwendung von datadiff macht den Job in SQL Server, in MS Access gibt es insgesamt für mich nicht sinnvoll.

ConflatedDate Expr1001 12/5/2010 9:34:56 AM 38.2 12/5/2010 9:34:57 AM 38.2 12/5/2010 9:34:58 AM 38.2 12/5/2010 9:35:08 AM 38.2 12/5/2010 9:35:13 AM 38.19 12/5/2010 9:35:14 AM 38.19 12/5/2010 9:35:16 AM 38.19 12/5/2010 9:35:18 AM 38.2

Wie Sie oben sehen können, durch keine Gruppe rechtzeitig fertig.
Kann mir hier jemand helfen und sagen, was mit dieser Frage in MS ACCESS falsch ist? Oder was tun, um nach Zeitraum zu gruppieren?

Viele viele thx
Jerome

+0

@StartDate "Variable" ist nicht gültig in MS-Access, wenn seine bereits als Parameter über Select-Anweisung definiert . –

+0

vereinbart. @StartDate wäre eine Variable, deren Wert manuell übergeben wird. Es stellt die erste Datetime der Datenteilmenge dar, von der ich die Zusammenführung starten möchte. I – Jerome

+0

Sie wollen "EVERY 300" Minuten gruppieren, aber teilen wird alle Arten von verschiedenen Ergebnissen zurück .. Sie sollten mod anstelle von divide verwenden .. was wird sein \ 300 –

Antwort

0

Sie dies für einige festen Intervallen tun könnte:

SELECT 
    CDate(Int(LAST_TRADE_TIME * 86400/300)/86400 * 300)) AS ConflatedDate, 
    Min(CUR) As MinCur 
FROM 
    MYTABLE 
GROUP BY 
    CDate(Int(LAST_TRADE_TIME * 86400/300)/86400 * 300)) 
+0

Ja @Gustav, Es funktioniert auch gut (als krish KM Vorschlag). Ich verstehe nicht wirklich, wie die Gruppe funktioniert, aber ... viel. – Jerome

+0

Die 'Group By' enthält den Ausdruck für das _first_field/column, der nicht aggregiert ist, also nach gruppiert werden muss. Das _second_ wird mit 'Min' aggregiert. – Gustav