2016-06-16 1 views
1

ich diese haben bisher:Gruppe von Datum Teil von Datetime und bekommen Anzahl der Datensätze für jede

select created_at, 
DATEDIFF(TO_DATE(current_date()), TO_DATE(sales_flat_order.created_at)) as delay, 
count(*) over() as NumberOfOrders 
FROM 
magentodb.sales_flat_order 
WHERE 
status IN ('packed' , 'cod_confirmed') 
GROUP BY TO_DATE(created_at) 

Aber das funktioniert nicht.

  1. Syntaxfehler:

    Fehler beim Anweisung kompilieren: Fehler: SemanticException [Error 10004]: Zeile 1: 7 Ungültige Tabellen-Alias ​​oder Spaltenverweis 'created_at': (mögliche Spaltennamen sind: (tok_function to_date (tok_table_or_col created_at)))

  2. count(*) does not give sum for each grouped by date but instead all of the rows.

Hinweis: Ich verwende hive tatsächlich, aber es ist genau wie SQL, wenn es

+0

Warum verwenden Sie over() mit count (*) ?? –

+0

Sollte ich nicht? Da wir Zeilen zählen müssen, die für einen Schlüssel gruppiert wurden, dachte ich, es würde so funktionieren. –

+0

Ich bekomme nicht den Zweck von over(); Wenn Sie dies entfernen, wird Ihre Anfrage gut funktionieren. –

Antwort

0

Versuchen Sie, diese abfragt kommt:

select created_at, 
DATEDIFF(TO_DATE(current_date()), TO_DATE(sales_flat_order.created_at)) as delay, 
count(*) as NumberOfOrders 
FROM 
magentodb.sales_flat_order 
WHERE 
status IN ('packed' , 'cod_confirmed') 
GROUP BY Date(created_at) 
0

Ich glaube, Sie Datumsteil (einschließlich Jahr, Monat und Tag) von created_at für die Gruppierung verwendet werden soll.

select 
date(created_at) as created_at_day, 
datediff(curdate(), sales_flat_order.created_at) as delay, 
count(*) as numberOfOrders 
from magentodb.sales_flat_order 
WHERE status IN ('packed', 'cod_confirmed') GROUP BY created_at_day 

Diese Abfrage zeigt nur die erste Bestellung, die am Tag erstellt wurde. Weil du nach dem Tag gruppierst. Sie können average verwenden, um die durchschnittliche Verzögerung der für den Tag erstellten Aufträge zu ermitteln.

Verwandte Themen