はじめに
Treasure DataはHiveの関数以外に独自関数を。。。(略
ドキュメントを見れば、ここから下は不要だ。
TD_LAST
Group by で集約された値の中で第二引数以降の値でソートを行い、一番最後になった行の第一引数に指定されたカラムの値を返します。
Signature
TD_LAST(ret_col, cmp_col1, cmp_col2, ...)
TD_FIRST
TD_LASTの逆です。
Signature
TD_FIRST(ret_col, cmp_col1, cmp_col2, ...)
使用例
下記のようなテーブルの場合の例です。
time | a | b | c | str |
---|---|---|---|---|
2015-06-06 21:00:00 | 1 | 1 | 4 | aaa |
2015-06-06 20:00:00 | 1 | 2 | 4 | bbb |
2015-06-06 19:00:00 | 2 | 3 | 4 | cccc |
2015-06-06 18:00:00 | 2 | 4 | 3 | dddd |
aでgroup byして、その中でbの値でソートして一番最後の行のstrの値を返す
sample1
select a,TD_LAST(str,b) as b_str
from test
group by a
a | b_str |
---|---|
1 | bbb |
2 | dddd |
sample2
select a, TD_FIRST(str,b) as b_str
from test
group by a
a | b_str |
---|---|
1 | aaa |
2 | cccc |
まとめ
とある列の最大値や最小値を探すならmax,minでよいのですが、とあるカラムで並べ替えて別のカラム値を得たい場合、いっぱいSQLを書かないといけない気がしますが、これらを使ったら簡単にかけて幸せですね。