2012-04-25 9 views
0

を働いていない、MS SQLに参加します宣言(実際には8時間以内)。ここに私が思い付いたものです:私はCL.ContactDateのために戻って非マッチングの日付を取得し、それはそれだけでその患者IDのためにCLのすべての行を返すということは明らかだからネストされた。これは、テーブル構造(関連ビット)である

SELECT 
D.ClientID 
D.DeclarationID 
CL.ContactDescription, 
CL.ContactDate, 

FROM Declarations D 

INNER JOIN (Contacts C 
     INNER JOIN (PartialContacts PC 
      INNER JOIN ContactLogs CL 
       ON PC.ContactPartID = CL.ContactPartID) 
      on PC.ContactID = C.ContactID 
    ) 
    ON C.ClientID = D.ClientID AND DATEDIFF(hour, D.DeclarationDate, CL.ContactDate) < 8 

ただし、参加することは、適切に機能していません。私は思う...私は本当に間違っているのか分からない。ダミアンへ

enter image description here

+0

。 –

+2

'PL 'はどこから来たのですか?それは 'CL'であるべきですか?また、宣言の後に8時間*以内に来る連絡先だけが必要ですか? 'DATEDIFF'は、最初の日付が2番目の日付よりも大きく、すべての負の値が<8であれば、完全に負の値を返すことができます。 –

+0

Tim:モデル内の右下に宣言があり、その関係はClientIDです。 Damien:PL = PC、typo(これはセキュリティ上の理由から実際のクエリではありません) –

答えて

0

ありがとう:

マッチングが正常に動作しませんでしたので、私は、DateDiff関数の下限値を指定しませんでした。 Apperently、参加するだけで結構です。私はテーブルの `Declarations`を欠けているとどのようにそれはあなたのモデルにClients``に関連している

SELECT 
D.ClientID 
D.DeclarationID 
CL.ContactDescription, 
CL.ContactDate, 

FROM Declarations D 

INNER JOIN (Contacts C 
     INNER JOIN (PartialContacts PC 
      INNER JOIN ContactLogs CL 
       ON PC.ContactPartID = CL.ContactPartID) 
      on PC.ContactID = C.ContactID 
    ) 
    ON C.ClientID = D.ClientID AND DATEDIFF(hour, D.DeclarationDate, CL.ContactDate) < 8 DATEDIFF(hour, D.DeclarationDate, CL.ContactDate) > 0.1 
0
SELECT 
D.ClientID 
D.DeclarationID 
CL.ContactDescription, 
CL.ContactDate 
FROM Declarations D 
INNER JOIN Clients CL ON D.ClientID=CL.ClientID 
INNER JOIN Contacts CO ON CL.ClientID=CO.ClientID 
INNER JOIN PartialContact PC ON PC.ContactID=CO.ContactID 
INNER JOIN ContactLog CL ON CL.ContactPartID=PC.ContactPartID 
WHERE DATEDIFF(hour, D.DeclarationDate, CL.ContactDate) BETWEEN 0 AND 8 
関連する問題