0

これはテーブル構造(関連するビット)です:

基本的なテーブル構造

clientIDの宣言と宣言の日付(実際には8時間以内)に一致するcontactLogエントリを見つけようとしています。これが私が思いついたものです:

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

ただし、CL.ContactDateに対して一致しない日付が返され、その患者IDのCLのすべての行が返されるだけであることが明らかなため、結合は正しく機能していません。私は思う...何が悪いのかよくわからない。

ここに画像の説明を入力してください

4

2 に答える 2

0

ダミアンに感謝:

datediff の下限を指定していなかったため、マッチングがうまくいきませんでした。どうやら、結合は問題ありません。

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
于 2012-04-25T08:19:26.330 に答える
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
于 2012-04-25T08:20:13.947 に答える