2017-06-20 9 views
0

私は、ColCがTrue(IDでグループ化された)になって最初の日付を取得し、新しい列を作成しようとしています。窓関数を使用した条件の最小日付

id   date   ColC 
1  2017-04-20  t 
1  2017-04-19  t 
1  2017-04-18  t 
2  2017-04-20  t 
2  2017-04-19  f 

だから、結果として、私は次のように取得したい:

id  first_date   
1  2017-04-18 
2  2017-04-20 

は、これまでのところ、私は(日付別ID順でパーティション)上FIRST_VALUE(日)のいずれかを使用してのアイデアを持っていますか、 min()。しかし、ColC = tの条件をどのように組み込むかは依然として疑問である。

結果は1行で取得できますか?

ありがとうございます!

+0

私はBigQueryのを使用しています – hamsy

答えて

1

がためのものですBigQuery Standard SQLを使用し、ColCが状態をfからtに変更してfに戻し、その後再びtに複数回

#standardSQL 
WITH yourTable AS (
    SELECT 1 AS id, DATE '2017-04-20' AS date, 't' AS ColC UNION ALL 
    SELECT 1, DATE '2017-04-19', 't' UNION ALL 
    SELECT 1, DATE '2017-04-18', 't' UNION ALL 
    SELECT 2, DATE '2017-04-21', 't' UNION ALL 
    SELECT 2, DATE '2017-04-20', 't' UNION ALL 
    SELECT 2, DATE '2017-04-19', 'f' UNION ALL 
    SELECT 2, DATE '2017-04-18', 't' UNION ALL 
    SELECT 2, DATE '2017-04-17', 'f' 
) 
SELECT id, date AS switch_date 
FROM (
    SELECT 
    id, date, ColC, 
    LAG(ColC) OVER(PARTITION BY id ORDER BY date) AS prevColC 
    FROM yourTable 
) 
WHERE ColC = 't' AND IFNULL(prevColC, 'f') != 't' 
-- ORDER BY id, date DESC 
1

私がやるように誘惑されるだろう。もちろん

select min(case when colc = 't' then date end) over (partition by id) 

、あなたの特定の結果のために、group byは簡単です:

についてどのように
select id, min(date) 
from t 
where colc = 't' 
group by id; 
0

以下
select id, min(date) as first_date from tablename where ColC='t' group by id 
関連する問題