2014-01-29 160 views
1

在表格中選擇第一次出現我有一個看起來像這樣的蜂巢表答:在蜂巢

id msts action 
123 1000 sleep 
123 1010 eat 
123 2001 sleep 
456 1200 eat 
456 1500 drink 

我想是選擇每個id對應min(tmst)整套。我能做到這一點通過運行

select * 
from A t1 semi 
left join 
(select id, min(msts) as msts from A group by id) 
t2 on t1.id = t2.id and t1.msts = t2.msts; 

,但我想看看我能做到這一點無需加入(或自定義減速機),因爲它是費時。

編輯:澄清:我想要得到的是第一個動作,每個idaction對應於min(msts))。

回答

3

有許多人對是否實施argmin和argmax UDF的,這是你想要在這裏正是一些早在提出在蜂巢社區。該決議不是要添加它,因爲有一個解決方法與結構。訣竅是結構首先比較第一個字段,因此您可以先將字段轉換爲具有比較字段的結構,然後執行min,然後取消結構化字段。在這種情況下:

select s.id as id, s.msts as msts, s.action as action from (
    select min(named_struct('msts', msts, 'id', id, 'action', action)) as s 
    from A group by id 
) t; 
+0

謝謝,它的工作原理。我不知道這個竅門。 – S4M

0

如果您需要顯示操作字段,則無法進行操作就無法進行操作。 如果你不需要的行動領域,試試這個:

select id, min(msts) as msts 
from A group by id; 
+1

這就是事情:我需要行動領域。 – S4M