2016-05-06 11 views
1

私は州全体のアプリケーションを管理し、Tableauを使用してデータの視覚化を作成します。SQL Server 2012結合テーブル内のサブクエリの最大日付

私は、連絡先エントリと今日(ケースノート日付)の間にどのくらいの時間が経過しているかを示す視覚化を作成することが任されています。私はケースノートテーブルに最大ケースノート日付を隔離する方法を知っている:

Select 
    [Case_Master_ID], 
    [Case_Note_Date], 
    [Case_Note_Category_Desc], 
    [Case_Note_Summary_Narr] 
From 
    buCase_Note 
Where 
    Case_Note_Date = (Select MAX(Case_Note_Date) 
         From buCase_Note) 

このクエリは、最大ケースが今日からテーブルにノートことを私が表示されます。問題は、今日のものだけでなく、すべての参加者に最大のケースノートを示す必要があるということです。私はケースを表示するために使用されている元のクエリは指摘している:

Select 
    vc.[_Case Master ID], 
    vc.[_Caseload Assignment Current], 
    vc.[_Participant Name], 
    vc.[Case Status], 
    vc.[Reporting Structure Level 4], 
    vc.[Reporting Structure Level 5], 
    vc.[Application Date], 
    vc.[Eligibility Date], 
    vc.[Eligibility Determination Extension Date], 
    vc.[Eligibility Extended To Date], 
    vc.[Days in Application], 
    cn.[Case_Note_Date], 
    cn.[Case_Note_Category_Desc], 
    cn.[Case_Note_Summary_Narr] 
From 
    biVR_Cases vc 
Left outer Join 
    buCase_Note cn ON cn.Case_Master_ID = vc.[_Case Master ID] 

私は開いているすべてのクライアントを表示するには、左側にbiVR_Casesを維持する必要があります。次に、ケースノートテーブルに参加する必要があります。参加者ごとに、最大ケースノートの日付を表示します。私は上記のクエリの最後にこれを追加すると:

Where cn.[Case_Note_Date] = (
    Select 
     MAX(cn.Case_Note_Date) 
    From buCase_Note) 

私は次のエラーを取得するSSMS 2012である:

それが含まれるサブクエリでない限り、集合体は、WHERE句に表示されない場合がありますHAVING句または選択リストに格納され、集約される列は外部参照です。

ケースノートテーブルに正常に参加し、参加者ごとに最新のケースノートのみを持ち込みながら、biテーブルを左に保持したいと考えています。

詳細を追加:ここではもちろん 、 は、次のクエリを実行するときに私が得るデータのサンプルです:

Select 
vc.[_Case Master ID], 
vc.[_Caseload Assignment Current], 
vc.[_Participant Name], 
cn.[Case_Note_Date], 
From biVR_Cases vc 
LEFT outer JOIN buCase_Note cn ON vc.[_Case Master ID] = cn.Case_Master_ID 

_Caseload割り当て現在のテスト参加者名Casenote日 テストカウンセラー参加 9月29日、 2010 2010年9月23日 2010年8月30日 2010年6月30日 2010年6月1日

biテーブルには、名前、アプリケーション、ケースマスタIDなどの参加者情報が含まれています.casenoteテーブルには、ケースマスタIDと結合が含まれています。また、各エントリが作成された日付も含まれます。上記のデータセットについては、私は各参加者のための最新のカセノー紙を持ち込むよう努めています。上記のサンプルには1つしか含まれていませんでしたが、私たちは15,000を超えています。各参加者には多くのケースノートがあります。私はトップカセノーを取得しようとしているので、最新のケースノートと今日の各参加者の日付差を計算することができます。私が追加した場合:

Where cn.[Case_Note_Date] = (Select 
top 1 [Case_Note_Date] 
From buCase_Note 
Order by 1 DESC)) 
OR 
Where Case_Note_Date=(
Select 
MAX(Case_Note_Date) 
From buCase_Note) 

それは今日だけ作成casenoteを持っていた参加者のための上部または最大casenoteを示しています。 casenoteテーブルに最大casenoteを表示する代わりに、参加者ごとに最大casenoteが必要です。私はそれがより理にかなってほしい。

+0

データを表示する必要があります。あなたのMAX(cn.Case_Note_Date)はbuCase_Noteから1つのデータだけを返します。[_ケースマスターID] – Chuck

答えて

1

になります。実際のデータがなければ、それが十分に効率的かどうかわかりませんが、うまくいくはずです。しかし、あなたがより良い答えを得るなら、私はそれを知りたいです。

Select vc.[_Case Master ID], 
vc.[_Caseload Assignment Current], 
vc.[_Participant Name], 
vc.[Case Status], 
vc.[Reporting Structure Level 4], 
vc.[Reporting Structure Level 5], 
vc.[Application Date], 
vc.[Eligibility Date], 
vc.[Eligibility Determination Extension Date], 
vc.[Eligibility Extended To Date], 
vc.[Days in Application], 
cn.[Case_Note_Date], 
cn.[Case_Note_Category_Desc], 
cn.[Case_Note_Summary_Narr] 
From biVR_Cases vc 
LEFT outer JOIN 
    (SELECT Case_Master_ID, Case_Note_Date, Case_Note_Category_Desc, Case_Note_Summar_Narr, 
      ROW_NUMBER() OVER (PARTITION BY Case_Master_ID ORDER BY Case_Note_Date DESC) as RowNum FROM buCase_Note) cn 
    ON cn.Case_Master_ID = vc.[_Case Master ID] AND cn.RowNum=1 
+0

うわー、これは完全に機能しました。私は論理の説明を聞くのが大好きですが、もうあなたの時間を取ることを望んでいません。ありがとうございました! – Mike

+0

ROW_NUMBER()とOVER句を読んでみてください。基本的な考え方は、Case_Note_Dateの降順で同じCase_Master_IDを持つ各レコードに番号を与えることです。各Case_Master_IDの最新の日付は、RowNumの値が1になります。最も効率的な方法であるとは言いませんが、動作します。 –

0

MAX(cn.Case_Note_Date)行からcn.を削除します。メインクエリから列を参照する必要はありません。 Case_Note_DatebuCase_Noteから選択するだけです。

だから、全体のクエリでは、あなたは、私が以下に含まれているもののようなものを試してみてください

Select 
vc.[_Case Master ID], 
vc.[_Caseload Assignment Current], 
vc.[_Participant Name], 
vc.[Case Status], 
vc.[Reporting Structure Level 4], 
vc.[Reporting Structure Level 5], 
vc.[Application Date], 
vc.[Eligibility Date], 
vc.[Eligibility Determination Extension Date], 
vc.[Eligibility Extended To Date], 
vc.[Days in Application], 
cn.[Case_Note_Date], 
cn.[Case_Note_Category_Desc], 
cn.[Case_Note_Summary_Narr] 
From biVR_Cases vc 
LEFT outer JOIN buCase_Note cn ON cn.Case_Master_ID = vc.[_Case Master ID] 
Where cn.[Case_Note_Date] = (Select 
MAX(Case_Note_Date) 
From buCase_Note) 
+0

こんにちはJ.kasper、すばやい返信をありがとう。提案された調整により、クエリが実行されました。私はまだ前と同じ問題を抱えていますが、それはまだ今日からケースノートを引っ張っています。たとえ最新のカシノノートが4か月前のものだったとしても、各参加者の最新のカセノノートを得る方法がありますか?これを見て時間をとってくれてありがとう。 – Mike

+0

@Mike 2つのテーブルといくつかのサンプルデータの定義を教えてください。 –

+0

私は元の質問に詳細を追加しました。それは、エクスポートフォーマットを凌駕していないようです。本質的には、参加者はカセノノートと1対多の関係を持つことになります。 1人の参加者と時間の経過とともに多くのケンセオートが出現します。目標は、トップまたは最大のカシノノートを分離して、最新のカシノノートの日付と今日との日付差の計算を行うことができるようにすることです。 – Mike

関連する問題