2017-10-19 47 views
2

我有以特定的方式(在HiveSQL)排序如下表:蜂房SQL子集基於第一值和唯一的組

ID Binary UnnecessaryVar 
1 F   a 
1 F   b 
1 T   c 
1 F   d 
2 F   e 
2 T   f 
2 F   g 

我想在第1T之前選擇每個ID的所有行二元變量,包括其中變量爲T.應用到表中的解決方案的結果,上面記載是:

ID Binary UnnecessaryVar 
1 F   a 
1 F   b 
1 T   c 
2 F   e 
2 T   f 

預先感謝您

+0

表中沒有_first_這樣的事情。您需要指定順序才能找到第一行。 – jarlh

+0

如果沒有'T'會怎麼樣? –

+0

@GordonLinoff在這種情況下,它應該取所有記錄爲假 – criticalth

回答

0

SQL表代表無序套。沒有「排序」沒有列來指定它。如果你有一個order by條款,你可以輕鬆地添加這樣的排序:

select . . . , 
     row_number() over (order by <keys used in order by>) as seqnum 
. . . 

因此,讓我假設你有這樣的列。這是一個非常簡單的方法:

select q.* 
from (select q.*, 
      min(case when binary = 'T' then seqnum end) over 
       (partition by id) as seqnum_t 
     from <your query here> q 
    ) q 
where seqnum <= seqnum_t or seqnum_t is null; 
+0

當然數據集是以特定/有意義的方式排序的,它與任務只是相關,甚至可以根據需要創建列(行號爲例子就足夠了)。我會立即嘗試並回復你。謝謝 – criticalth

+0

查詢第一行中的別名應該是t。*嗎? – criticalth