2016-06-16 4 views
1

のレコード数を取得し、私は今のところ、これを持っている:グループと各

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) 

しかし、これは動作しません。

  1. 構文エラー:

    エラー文のコンパイル中:FAILED:SemanticException [エラー10004]を1行目:7無効な表の別名または列参照 'のcreated_at':(可能な列名は以下のとおりです(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

注:私は実際にハイブを使用していますが、それはクエリに来るとき、それはまさに、SQLのようなものです

+0

なぜcount(*)でover()を使用しているのですか? –

+0

すべきではないですか?キーのためにグループ化された行を数える必要があるので、私はそれがそのように動作すると思った。 –

+0

私はover()の目的を得ていない。これを削除しても、クエリは正常に動作します。 –

答えて

0

これを試してみてください:

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

私はあなたがグループ化created_atの(年、月、日を含む)日付部分を使用したいと思います。

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 

このクエリは、その日に作成された最初の注文のみを表示します。あなたはその日までにグループ分けしているからです。 averageを使用して、その日に作成された注文の平均遅延を見つけることができます。

関連する問題