2017-10-19 44 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