2016-08-22 4 views
1

次の例では、一般的に、凝集体はヌルを無視する傾向がある、ので、私は結果BigQueryの、FIRST_VALUE、およびヌル

Row a b f0_  
1 1 1 3  
2 1 2 3  
3 1 3 5  
4 1 4 5  
5 1 5 null 

を期待しているだろう。 FIRST_VALUEはNULLを無視しない場合は、使用上のどのような価値を持っているんLEAD

例:

select a, b, first_value(c) over (partition by a order by b asc rows BETWEEN 1 following AND UNBOUNDED FOLLOWING) 
from 
(select 1 as a, 1 as b, 1 as c), 
(select 1 as a, 2 as b, null as c), 
(select 1 as a, 3 as b, 3 as c), 
(select 1 as a, 4 as b, null as c), 
(select 1 as a, 5 as b, 5 as c), 

Row a b f0_  
1 1 1 null  
2 1 2 3  
3 1 3 null  
4 1 4 5  
5 1 5 5 
+0

[Big Queryで値の列から最初のNULL値を取得する方法は?](http://stackoverflow.com/questions/32788958/how-to-get-the -nour-value-from-a-value-in-value-in -big-query) –

答えて

1
を与え、私は結果

を期待しているだろう

以下のトリックは、あなたの質問で(あなたの質問で) SULT

SELECT 
    a, b, 
    MAX(c) OVER (PARTITION BY a ORDER BY grp ASC RANGE BETWEEN 1 FOLLOWING AND 1 FOLLOWING) 
FROM (
    SELECT 
    a, b, c, 
    COUNT(c) OVER (PARTITION BY a ORDER BY b ASC rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) grp 
    FROM 
    (SELECT 1 AS a, 1 AS b, 1 AS c), 
    (SELECT 1 AS a, 2 AS b, NULL AS c), 
    (SELECT 1 AS a, 3 AS b, 3 AS c), 
    (SELECT 1 AS a, 4 AS b, NULL AS c), 
    (SELECT 1 AS a, 5 AS b, 5 AS c) 
) 

それは

LEAD

を使用してオーバーLEADは、より多くのリーチの署名があるどのような値を持っていない - LEAD(<expr>[, <offset>[, <default_value>]])を - ので、あなただけの最初の値が必要な場合は、短い FIRST_VALUE(<field_name>)にそれをカットすることができます - 私はこれを考えます大きな実用的な違いです

+0

また、私はまだ必要以上に多くのデータを処理しています。元のウィンドウのすべての値を 'NEST'してから、結果に' FIRST ... WITHIN'を使うと正しい値が得られますが、不要なときはウィンドウ全体を処理しています。先行するウィンドウが最初の値を得るために繰り返されるので、私はLEADよりもどのような価値があるのか​​を尋ねるのにちょっと慌てていました。 –

+0

あなたがまだあなたの質問に実際に答えたので、それが何とかあなたを助けたなら、あなたはまだ答えに投票できます:o) –

関連する問題