2016-05-13 22 views
0

私はレポートライター(DataInsights)と一緒に作業しています。この特定のレポートでは、一部のクライアントには「特別料金」があり、そうでないクライアントもあります。そうする人には、有効期限があります。現在、特別レートの各呪文が独自のラインを生成しているため、レポートはクライアントごとに特別レートを持つ複数のラインを生成しています。私たちは、 "特別料金"を持たないすべてのレコードを維持し、最新の "特別料金" "有効期限"の行を返すだけの単純なSQLステートメントが最後の3ヶ月以内に来るようにしたいと思います。3ヶ月以内に最新のレコードがある場合

(現在)

Name  Client #  Rate  Exp. Date 
John Doe  12345  Special  01/12/2014 
John Doe  12345  Special  01/12/2015 
John Doe  12345  Special  01/12/2016 
Jane White  78965 
Dixie Brown  45879  Exceptional 07/30/2011 
Dixie Brown  45879  Exceptional 07/30/2012 
Dixie Brown  45879  Exceptional 07/30/2013 

(次のようになります。

例(過去3ヶ月に限定する方法がない場合、それは大丈夫だ、私たちは、最新の行が必要) )

John Doe  12345  Special  01/12/2016 
Jane White  78965 
Dixie Brown  45879 
+0

SQLの種類、PL SQL? – codeMonger123

+0

テーブル構造、サンプルデータ、予想される出力、試したこと、それがうまくいかなかった理由(間違ったデータ、エラーメッセージなど)を確認するのに役立ちます。読んでください:http://stackoverflow.com/help/how-to-ask –

答えて

1

これを試してみてください:

select Name, Client, Rate, Date as Special_Date 
from yourtable 
    INNER JOIN 
     (
      select max(Date) Date , Name, Client 
      from yourtable 
      group by Name, Client 
     ) thedatetable 
0

名前、クライアント、レートがサンプルデータと同じグループである場合は、max(expdt)を返すだけでグループ化することができます。特別料金がなく、3ヶ月に制限されているレコードをすべて取得するには、それらをフィルタとしてORを使用して追加します。以下のSQL Serverの構文を使用していくつかのデータを編集したビットは、3ヶ月の制限内に収まるように:

WITH testdata(Name, Client, Rate, expdt) 
AS(  select 'John Doe', 12345, 'Special', '01/12/2016' 
union all select 'John Doe', 12345, 'Special', ' 03/13/2016' 
union all select 'John Doe', 12345, 'Special', '03/12/2016' 
union all select 'Jane White', 78965, NULL,   NULL 
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016' 
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016' 
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016' 
) 

select Name, client, Rate, max(expdt) expdt from testdata 
where Rate is NULL 
    or expdt>=DATEADD(month, -3, GETDATE()) 
group by Name, client, Rate 

OUTPUT:

Name  client Rate  expdt   
----------- ------ ----------- ---------- 
Dixie Brown 45879 Exceptional 07/30/2016 
Jane White 78965 null  null  
John Doe 12345 Special  03/12/2016