2017-09-14 24 views
2

ハイブテーブルから*を選択しようとしていますが、TRANS_DATEと呼ばれる日付列は最大TRANS_DATEより365日以上前になります。以下は日付が最大日付よりも小さいハイブテーブルから選択

は、私がこれまで試したクエリです:ステートメントのコンパイル中 「エラー:

以下
select * from TABLE 
where (TRANS_DATE > DATE_SUB(max(TRANS_DATE), 365)) and 
     (TRANS_DATE < max(TRANS_DATE)); 

は、私が得ているエラーで失敗しました:SemanticException [エラー10128]:ライン2時28分ありません2006-05-30 00:00:00.0 『

クエリはにハイブテーブルからデータを読み取るためになることです。まだ「日付形式の例がある

を』 UDAF「最大」のための場所をサポートQlikviewので理想的に私は手で変数を定義したくないとpr選択を動的に行うことができます。私がHiveを初めて知りましたので、このうちのどれかが愚かであれば謝罪してください。

+0

これは、Oracleを含む任意のデータベース上の無効なクエリです。 –

+0

無効な方法はありますか?そこではできないのですか? – LorcanT

+0

無効な構文と同様です。 –

答えて

0

計算サブクエリでMAX_DATEとクロスがテーブルに参加:

select * 
    from TABLE a 
     cross join --cross join with single row 
     (select max(TRANS_DATE) as max_trans_date from TABLE) b 
where (a.TRANS_DATE > DATE_SUB(b.max_trans_date, 365)) 
    and (a.TRANS_DATE < b.max_trans_date); 

分析機能により:

select a.* from 
(select a.*, 
     max(TRANS_DATE) over() as max_trans_date 
    from TABLE a) a 
where (a.TRANS_DATE > DATE_SUB(a.max_trans_date, 365)) 
    and (a.TRANS_DATE < a.max_trans_date); 
+0

このleftjoinをお寄せいただきありがとうございます。過去にOracle SQLを使用していましたが、日付<最大の日付はどこでもシンプルにできると思いましたが、明らかにそうではありませんでした。とにかく、あなたの解決策は、このためにあなたに感謝します。 – LorcanT

+0

Windows関数 –

+0

解析機能を追加しました:) – leftjoin

関連する問題