2017-10-09 4 views
2

毎週発生するデータインポートがあり、開始すると数日かかります。その結果、日付列には、データのインポートごとに複数の日付があります。私は各輸入の最小日付を取得したいと思います。これはSQLで可能ですか?具体的には、Google BigQueryで例:SQL:以前の日付が1日以上前の場合に分割した日付の最小日付を取得する

date desired_output 
4/25/17 4/25/17 
4/26/17 4/25/17 
4/27/17 4/25/17 
5/2/17 5/2/17 
5/3/17 5/2/17 
5/10/17 5/10/17 
5/16/17 5/16/17 
5/17/17 5/16/17 
5/23/17 5/23/17 
5/24/17 5/23/17 
5/30/17 5/30/17 
5/31/17 5/30/17 
6/5/17 6/5/17 
6/6/17 6/6/17 
+0

同じインポートに属する行を識別できるフィールドはありますか?またはテーブル全体が1つのインポートですか? –

+0

残念ながら、私はしません。今後はこのフィールドを追加していきますが、手動で日付の名前を変更することなく履歴データを分析したいと考えています。 –

+0

異なる輸入品をどのように区別する予定ですか?あなたはこれのためにいくつかのロジックを提供する必要があります。期待される出力を伴う単純化されたデータの例を示します。あなたがそれを持っている限り、それは非常にシンプルにする必要があります –

答えて

2

順番に並んでいる日付のグループを特定することができます。これは、ギャップと島の問題です。おそらくこれは、あなたがやりたいことになります。

select date, 
     min(date) over (partition by date_add(date, interval - seqnum_d day)) as desired_output 
from (select t.*, 
      dense_rank() over (order by date) as seqnum_d 
     from t 
    ) t 

日付の計算は、シーケンスを差し引くことにより、日付の配列を同定 - 出来上がりを!結果は定数です。

注:これは、日付のシーケンスにギャップがあることを前提としています。

また、dense_rank()を使用して、1つの日付で複数のエントリを処理できるようにしました。

+0

のロジックが完璧です!本当にありがとう!非常にきちんとした! –

関連する問題