2016-07-13 5 views
1

とHIVEに2つのテーブルを結合します。製品の表は、各項目の歴史あるは、私は特定の日付と時刻の項目のコストを取得する必要があり、サブクエリ

create table sales (product_id int, items_sold int, date_loaded date); create table product (product_id int, description string, item_cost double, date_loaded date);

:私はこれらの2つのテーブルを持っています。今日のアイテムのコストが1.00ドルだが、昨日のアイテムのコストが$ 0.99だったなら、毎日2つのレコードがあるだろう。私が私の販売データをロードするとき、私は昨日のアイテムのコストを反映する必要があり、今日のコストは反映していません。ここで

は、私が実行しようとしているクエリです:

SELECT s.product_id, s.items_sold, p.description, s.items_sold * p.item_cost as total_cost FROM sales s, product p WHERE p.product_id = s.product_id and p.date_loaded <= ( SELECT MAX(pp.date_loaded) FROM product pp WHERE pp.product_id = s.product_id and pp.date_loaded <= s.date_loaded )

SALES表:

|PRODUCT_ID |ITEMS_SOLD |DATE_LOADED | |1 |4 |2016-06-30 | |1 |5 |2016-07-01 | |1 |6 |2016-07-02 | |1 |3 |2016-07-03 |

Productテーブル:

|PRODUCT_ID |DESCRIPTION |ITEM_COST |DATE_LOADED | |1 |ITEM A |0.99 |2016-06-20 | |1 |ITEM A |1.00 |2016-07-02 |

私はこの結果を見ると期待する:私は、サブクエリのこのフォームを読んだことがあるすべてのものから

|PRODUCT_ID |ITEMS_SOLD |DESCRIPTION |ITEM_COST |TOTAL_COST | |1 |4 |ITEM A |0.99 |3.96 | |1 |5 |ITEM A |0.99 |4.95 | |1 |6 |ITEM A |1.00 |6.00 | |1 |3 |ITEM A |1.00 |3.00 |

が許可されていません。だから私はHIVEでこれを達成できますか?

答えて

0

のみの販売レコードごとに1つの行を返すの問題を解決しないCTELag widow function

 With result as(select PRODUCT_ID, DESCRIPTION, ITEM_COST , DATE_LOADED , 
    LEAD(DATE_LOADED, 1,'2999-01-01') 
    OVER (ORDER BY DATE_LOADED) AS fromdate from PRODUCT) 
    SELECT s.product_id, s.items_sold, p.description, s.items_sold * p.item_cost 
    as total_cost FROM sales s join result p on s.product_id = p.product_id 
    where s.DATE_LOADED >= p.DATE_LOADED and s.DATE_LOADED < p.fromdate ; 

result

+0

で達成することができます。それはまだfromdate以下のすべての行を返します。それが実際には0レコードを返します。あなたの最後のdate_loaded私はそれが結果セットからであると仮定しています。あなたはまた、売上テーブルごとに一つのレコードを持っているシュレッドいる –

+0

例があります..あなたは私が結果セットで間違っているものを教えてくださいすることができます。.. –

+0

私はこの実行したときにこれは私が取得エラーです:文を提出する H110できません。ステートメントのコンパイル中にエラーが発生しました:FAILED:SemanticException Windowing呼び出しをグループに分割できませんでした。少なくとも1つのグループは入力列のみに依存する必要があります。また、循環依存性もチェックしてください。根本的なエラー:org.apache.hadoop.hive.ql.parse.SemanticException:ライン3時48無効な表の別名または列参照「DATE_LOADED」:(可能な列名は次のとおりです。)[ERROR_STATUS] –

関連する問題