0
以下のような表があります。私は購入日を計算しようとしていますハイブ:フラグに基づいて開始日と終了日を取得します
Visitorid date Purch_flag
A 1-May NULL
A 2-May NULL
A 3-May 1
B 1-May NULL
B 2-May 1
B 3-May NULL
B 4-May 1
C 1-May NULL
理想的には、開始日と終了日を持つ出力テーブルを作成したいと考えています。
select t.*,
coalesce(max(case when purch = 1 then date end) over (partition by visitorid order by date asc rows between unbounded preceding and 1 preceding),
min(date) over (partition by visitorid)
) as start_date
min(case when purch = 1 then date end) over (partition by visitorid order by date desc) as end_date
from t;
終了日が説明するのは簡単です:私はあなたがmax()
累積とmin()
ウィンドウ機能でこれを行うことができると思う同じvisitorid
Visitorid date Purch_flag start_date end_date
A 1-May NULL 1-May 3-May
A 2-May NULL 1-May 3-May
A 3-May 1 1-May 3-May
B 1-May NULL 1-May 2-May
B 2-May 1 1-May 2-May
B 3-May NULL 3-May 4-May
B 4-May 1 3-May 4-May
C 1-May NULL NULL NULL
このエラーが発生しました:SemanticException WindowFrameの終了は、UNBOUNDED PRECEDING – user7088181
@ user7088181にすることはできません。 。 。 Hiveのドキュメントには、これが有効な構文であることが明示的に記載されています(https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics)。 (ROWS | RANGE)と([UNBOUNDED | [num])との間には、次のような構文が許されています: "現在の行|(UNBOUNDED | [num])) –