2017-08-18 9 views
1

各IDにNull値を持つ複数の行があるBigQueryにテーブルがあります。私は完全なセットを作成するために行を結合したい。ここでSQLクエリのヘルプ - 各ID(複数行)にNULL以外の値を選択してください

データのサンプルセットです:

ID Address  CreatedDate  City 
1 1 1st Street  NULL  New York City 
1  NULL   8/18/17  NULL 
2  NULL   8/13/17  Boston 
2 2 2nd Street NULL   NULL 
3 3 3rd Street 8/1/17  Los Angeles 
3  NULL    NULL  NULL 
3  NULL   8/7/17  NULL 
ここ

が予想される出力です:

ID Address  CreatedDate  City 
1 1 1st Street 8/18/17 New York City 
2 2 2nd Street 8/13/17  Boston 
3 3 3rd Street 8/1/17  Los Angeles 

正直なところ、私はこれがも可能ですわからないんだけど、何か提案が大幅にだろう感謝!あなたは一意で、各id

select ID, max(Address), max(CreatedDate), max(City) 
from your_table 
group by ID 
+0

[OK]をクリックし、さらにオプションがある場合は値をどのように選択しますか?たとえば、ID 3と属性CreatedDate? –

答えて

2

グループ。複数のグループが存在する場合、各グループの最大値/最小値が必要であると仮定します。 ID 3の日付列を見ると分です。別の可能性として

SELECT ID 
    , min(address) as Address 
    , min(createdDate) as createdDate 
    , min(city) as City 
FROM table 
GROUP BY ID 
+0

素晴らしい。非常に高速。そう正確<3 –

2

凝集はここで重要であるために何かを含む結果を得るためにmax()を使用する列によって

0

、あなたは(非常には、標準を使用することをお勧め)機能にBigQueryのStandard SQLバージョンで利用可能なARRAY_AGGを使用してこれを解決することができます。

クエリについて:

#standardSQL 
SELECT 
    ID, 
    ARRAY_AGG(Address IGNORE NULLS LIMIT 1) Address, 
    ARRAY_AGG(CreatedDate IGNORE NULLS LIMIT 1) CreatedDate, 
    ARRAY_AGG(City IGNORE NULLS LIMIT 1) City 
from 
    `your_table` 
GROUP BY 
    ID 

あなたがシミュレートされたデータをテストすることができます。

#standardSQL 
WITH data AS(
    SELECT 1 ID, '1 1st Street1' Address, NULL CreatedDate, 'New York City' City UNION ALL 
    SELECT 1, NULL, '8/18/17', NULL UNION ALL 
    SELECT 2, NULL, '8/13/17', 'Boston' UNION ALL 
    SELECT 2, '2 2nd Street', NULL, NULL UNION ALL 
    SELECT 3, '3 3rd Street', '8/1/17', 'Los Angeles' UNION ALL 
    SELECT 3, NULL, NULL, NULL UNION ALL 
    SELECT 3, NULL, '8/7/17', NULL 
) 

SELECT 
    ID, 
    ARRAY_AGG(Address IGNORE NULLS LIMIT 1) Address, 
    ARRAY_AGG(CreatedDate IGNORE NULLS LIMIT 1) CreatedDate, 
    ARRAY_AGG(City IGNORE NULLS LIMIT 1) City 
from 
    data 
GROUP BY 
    ID 
ORDER BY 
    ID 

あなたは一度リソースを超えるクエリがちょうど適切ARRAY_AGGを使用することにより秒で処理されることがあります。

関連する問題