2017-12-26 3 views
-1

Ich habe einige Probleme beim Erstellen einer Abfrage, die mir die Daten nach Datum gruppiert. Ich habe ein paar Beispiele hier im Stackoverflow gelesen und konnte es nicht tun. Kann mir bitte jemand helfen, das zu verstehen? Dies sind die Daten die ich habe:Zusammenfassung des Tages in Mysql

veiculo_id | data_pacote    | hodometro_inicial | hodometro_final | velocidade 

1125370 | '2017-11-13 22:53:12-02' | 6673657   | 6673657   | '20' 
1125370 | '2017-11-13 22:53:11-02' | 42526    | 42526   | '35' 
1125370 | '2017-11-13 22:53:09-02' | 2532721   | 2532721   | '47' 
1125370 | '2017-11-13 22:53:05-02' | 386358   | 386358   | '0' 
1125370 | '2017-11-14 12:53:03-02' | 273085   | 273085   | '45' 
1125370 | '2017-11-14 12:53:02-02' | 2004482   | 2004482   | '43' 

Ich brauche eine Zusammenfassung des Tages für jeden veiculo_id (dadtveioid) zu bekommen, dass das Maximum und das Minimum des dadtodometro des Tages sein würde und die durchschnittliche dadtvelocidade dieses Tages . Das Ergebnis würde wie folgt sein:

veiculo_id | data_pacote | hodometro_inicial | hodometro_final | velocidade 

1125370 | '2017-11-13' | 6673657   | 42526   | '51' 
1125370 | '2017-11-14' | 2004482   | 273085   | '44' 

Was ich jetzt habe, ist dies:

SELECT dadtveioid AS veiculo_id, 
     dadtdt_pacote AS data_pacote, 
     min(dadtodometro) AS hodometro_inicial, 
     max(dadtodometro) AS hodometro_final, 
     sum(dadtvelocidade) AS velocidade 
FROM dados_telemetria 
GROUP BY dadtveioid, dadtdt_pacote 
ORDER BY dadtdt_pacote DESC 

Dank.

+3

Verwenden ** GROUP BY dadtveioid, Datum (dadtdt_pacote) ** und auch ** Datum (dadtdt_pacote) AS data_pacote ** –

+0

Danke @BerndBuffen, es hat funktioniert. Ich habe das schon mal versucht, aber es hat nicht funktioniert, ich denke ich habe etwas verpasst. – jackcar

Antwort

0

Sie folgenden Code versuchen in postgreSQL

WITH dados_telemetria AS (
SELECT 1125370::int AS veiculo_id, '2017-11-13 22:53:12-02'::TIMESTAMP AS data_pacote, 6673657::int AS hodometro_inicial, 6673657::int AS hodometro_final,'20'::int AS velocidade 
UNION ALL 
SELECT 1125370::int AS veiculo_id, '2017-11-13 22:53:11-02'::TIMESTAMP AS data_pacote, 42526::int AS hodometro_inicial, 42526::int AS hodometro_final, '35'::int AS velocidade 
UNION ALL 
SELECT 1125370::int AS veiculo_id, '2017-11-13 22:53:09-02'::TIMESTAMP AS data_pacote, 2532721::int AS hodometro_inicial, 2532721::int AS hodometro_final,'47'::int AS velocidade 
UNION ALL 
SELECT 1125370::int AS veiculo_id, '2017-11-13 22:53:05-02'::TIMESTAMP AS data_pacote, 386358::int AS hodometro_inicial, 386358::int AS hodometro_final, '0'::int AS velocidade 
UNION ALL 
SELECT 1125370::int AS veiculo_id, '2017-11-14 12:53:03-02'::TIMESTAMP AS data_pacote, 273085::int AS hodometro_inicial, 273085::int AS hodometro_final, '45'::int AS velocidade 
UNION ALL 
SELECT 1125370::int AS veiculo_id, '2017-11-14 12:53:02-02'::TIMESTAMP AS data_pacote, 2004482::int AS hodometro_inicial, 2004482::int AS hodometro_final,'43'::int AS velocidade 
) 
SELECT veiculo_id, 
     DATE(data_pacote) AS data_pacote, 
     min(hodometro_inicial) AS min_hodometro_inicial, 
     max(hodometro_inicial) AS max_hodometro_inicial, 
     min(hodometro_final) AS min_hodometro_final, 
     max(hodometro_final) AS max_hodometro_final, 
     sum(velocidade) AS velocidade 
FROM 
    dados_telemetria 
GROUP BY 
    veiculo_id, 
    DATE(data_pacote) 
ORDER BY data_pacote DESC 

Sie folgendes Ergebnis erhalten wird

veiculo_id data_pacote min_hodometro_inicial max_hodometro_inicial min_hodometro_final max_hodometro_final velocidade 
---------- ----------- --------------------- --------------------- ------------------- ------------------- ---------- 
1125370 2017-11-13 42526     6673657    42526    6673657    102   
1125370 2017-11-14 273085    2004482    273085    2004482    88