蜂房SQL子集基于第一值和唯一的组
问题描述:
我有以特定的方式(在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
预先感谢您
答
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
表中没有_first_这样的事情。您需要指定顺序才能找到第一行。 – jarlh
如果没有'T'会怎么样? –
@GordonLinoff在这种情况下,它应该取所有记录为假 – criticalth