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.