2017-06-15 13 views
1

以下は私のテーブルで、IDを持って、列方法を確認するために

ID  Date 
1  2017-06-11 
2  2017-06-11 
3  2017-06-04 
1  2017-06-04 
4  2017-06-04 
5  2017-06-04 
6  2017-05-28 
5  2017-06-04 

2017年6月11日。この週開始日および2017年6月4日の日付先週の開始日です。 Iは、IDは、例えば1

この週の前の週に存在していない場合、フラグを作成する、ID 4が前の週に存在しないと、このweek.similarly IDである6 2017-で存在します05-28であり、2017-06-04には記載されていません。私は左で試してみました 私は/今週の私のデータを分析照会すると、私は前の週のための私のデータを分析するときに、私のデータは、同様に

ID  Date     flag 
1  2017-06-11   0 
2  2017-06-11   0 
3  2017-06-04   0 
1  2017-06-04   0 
4  2017-06-04   1 
5  2017-06-04   0 

のようになります、

ID  Date    flag 
3  2017-06-04  0 
1  2017-06-04  0 
4  2017-06-04  0  
5  2017-06-04  0 
6  2017-05-28  1 
5  2017-06-04  0 

は、IDの存在を確認するために参加します現在の日付ではなく、以前の日付では、しかし、これは動的でなければならないので、私は不正確なデータを取得します。 毎週質問すると、今週と前週だけを比較しなければなりません。先週質問すると、先週と2017-05-28のデータしか取得しなくてはなりません。

次に、日付を選択して結果を表示するために、tableauにフィルタを与えます。

この問題の解決方法を教えてもらえますか?

+0

の値を返しますあなたは使っていますか? (MSSQL、Oracle、Mysql、...) – etsa

答えて

0

したい週の開始日を計算しているどのデータベース2週間

DECLARE @date DATETIME = GETDATE() 

DECLARE @firstDayWeek DATE =(SELECT convert(DATE,(DATEADD(dd,-DATEPART(WEEKDAY, @date)+1,@date)))) 

SELECT * 
,CASE WHEN f.lastDate < @firstDayWeek THEN 1 ELSE 0 END flag 
FROM tablee t1 
OUTER APPLY(SELECT MAX(t2.date) lastDate 
      from tablee t2 
      WHERE t2.ID=t1.ID 
       AND t2.date < DATEADD(dd,7,@firstDayWeek) 
      ) f 
WHERE BETWEEN DATEADD(dd,-8,@firstDayWeek) AND DATEADD(dd,6,@firstDayWeek) 
+0

ありがとう..これは私が探していたものです。しかし、私はこれをtableauで呼び出す方法を調べなければなりません。 – chits

+0

どのように、私は外の適用と左の結合が同じであると仮定していました。あなたは、ここで働いていて、参加していないのはどういうことを教えてもらえますか?(これはちょっとしたことです)。 – chits

+0

"Join"は、2つの独立したテーブルをリンクするために使用されます。 "APPLY"を使用すると、前の表に従って作成されたテーブルにリンクが提供されます。 exp:fテーブルはテーブルt1を使用して作成されます(t2.ID = t1.ID) – freedom

0

表示する曜日に応じてクエリ結果を表示したいので、関心のある開始日と対応する前週の開始日をパラメータとして使用するクエリを作成することをお勧めします。 あなたが正しいと理解していれば、あなたは次のような質問が欲しいです... "今週と前週のすべてのレコードを取ってください;今週の対応するエントリーが存在しない前週のレコードの場合、write flag = 1 ; else flag = 0を書き込む。その後、直接SQLにこれを「翻訳」次のクエリでは、仕事をする必要があります。

select 
    t1.*, 
    (case when t1.date = '2017-06-04' 
     and not exists 
      (select * from table t2 where t2.id = t1.id and t2.date = '2017-06-11') 
     then 1 
     else 0 
     end) as flag 
from table t1 
where t1.date = '2017-06-04' or t1.date = '2017-06-11' 
関連する問題