Hallo,
eine unserer vielen preisgekrönten Anwendungen, der Sportwagen-Manager, braucht mal wieder ein paar neue statistische Features. Ich habe in einer Tabelle stehen, wann welches Auto mit welcher Geschwindigkeit gefahren wurde. Die Tabelle sieht im Postgres ungefähr so aus:
CREATE TABLE auto_nutzung (
Zeit DateTime encode lzo,
Geschwindigkeit FLOAT encode bytedict,
AutoName varchar(60) encode lzo
) sortkey(Zeit);
In dieser werden Daten ungefähr in dieser Art eingefügt:
INSERT INTO auto_nutzung ( Zeit, Geschwindigkeit, AutoName ) VALUES
( '2010-10-20 0:20:1', 104.100000, 'Lamborghini' ),
( '2014-9-1 0:22:22', 139.400000, 'Lamborghini' ),
( '2010-5-20 6:28:45', 153.500000, 'Ferrari' ),
( '2013-5-20 20:12:35', 195.100000, 'Porsche' ),
( '2012-1-5 10:31:23', 144.400000, 'Ferrari' );
Es handelt sich natürlich um ein paar 1000 Datenpunkte, unsere Kundschaft fährt schließlich sehr häufig mit ihren Sportwaren. Jetzt möchte ich folgende Informationen:
- Wie viele Autos, unabhängig vom Typ, sind an jedem Tag gefahren?
- Was war an jedem Tag die maximale Geschwindigkeit aller Autos, wieder unabhängig vom Typ?
- Welches Auto wurde an diesem Tag am meisten gefahren? Bei Gleichstand nehm ich irgendeins der meisten.
Die ersten beiden Punkte krieg ich hin:
SELECT
DISTINCT(TO_CHAR(Zeit, 'YYYY-MM-DD 00:00:00')) AS ZeitRaum,
COUNT(*) OVER(PARTITION BY ZeitRaum) AS "Autos pro Tag",
MAX(Geschwindigkeit) OVER(PARTITION BY Zeitraum) AS "Maximalgeschwindigkeit"
FROM
auto_nutzung
WHERE 1;
ergibt sowas wie:
zeitraum | autos pro tag | maximalgeschwindigkeit
---------------------+---------------+------------------------
2010-05-16 00:00:00 | 53 | 199.1
2011-07-09 00:00:00 | 62 | 196.9
2010-04-20 00:00:00 | 53 | 199.5
2013-11-08 00:00:00 | 71 | 198.3
2014-07-01 00:00:00 | 71 | 197.3
2013-06-21 00:00:00 | 63 | 198.9
2010-03-16 00:00:00 | 49 | 197.9
...
Am letzten Punkt scheitere ich aber. Irgendwie MAX(COUNT(*)) GROUP BY und so… ich krieg’s irgendwie nicht hin. Hat jemand von euch eine Idee?
Vielen Dank.
Mf
Gruß vom Frank.