2

SQLの初心者で、私の快適ゾーンから一歩踏み出しました。WPFアプリケーションでMySQLを使用しています。

データベースに3つのテーブルがあります。

忍耐:

ID | Name | ...

紹介:

ID | FK_Patient_ID | ...

訪問:

ID | FK_Referral_ID | Date | FollowUpDate | FollowUpInterval | ...

'FK'フィールドは、他のテーブルへの外部キーです。したがって、訪問は紹介に属し、紹介は患者に属します。

各患者の最新の訪問(または紹介なしでは訪問できないため、紹介)を取得して、次の情報を取得したいと思います。

patients.ID | patients.Name | visits.FollowUpDate | visits.FollowUpInterval

私がやろうとしているのは、フォローアップ訪問を逃した患者のリストを取得することです。

うまくいけば、これはあなたのSQLの人々にとって簡単なことではありません...

4

3 に答える 3

2
SELECT   p1.ID
        ,p1.Name
        ,v1.FollowUpDate
        ,v1.FollowUpInterval
FROM    Patients p1
        INNER JOIN
        Referals r1 ON p1.ID=r1.FK_Patient_ID
        INNER JOIN
        Visits v1 ON r1.ID=v1.FK_Referral_ID
        INNER JOIN (
        SELECT  MAX(v.ID) AS ID
        FROM    Patients p
                INNER JOIN
                Referals r ON p.ID=r.FK_Patient_ID
                INNER JOIN
                Visits v ON r.ID=v.FK_Referral_ID
        GROUP BY p.ID) v2 ON v1.ID=v2.ID
于 2012-12-20T04:40:22.940 に答える
1

これが MySQL で機能するかどうかは 100% 確信が持てませんが、SQL Server で実行できる 1 つの方法を次に示します。これは移植可能だと思います。

SELECT p.ID, p.NAME, v.FollowUpDate, v.FollowUpInterval
FROM Patients p
    JOIN Referrals r ON p.ID = r.FK_PatientID
    JOIN Visits v ON ON r.ID = v.FK_Referral_ID
    JOIN (SELECT r.FK_Patient_ID, MAX(v.Date) AS [Date]
            FROM Referrals r 
                JOIN Visits v ON r.ID = v.FK_Referral_ID
            GROUP BY r.FK_Patient_ID
         ) x ON p.ID = x.FK_Patient_ID
                AND v.Date = x.Date 

基本的に、サブクエリを使用して患者の最新の訪問を検索し、それを元のテーブルに結合して、その値に一致する行を引き出します。これは、その日付の行が 1 つある場合にのみ機能します。

于 2012-12-20T04:37:44.030 に答える
0

PostgeSQL で以下のスクリプトを使用したところ、うまくいきました。

SELECT p.ID, p.NAME, v.FollowUpDate, v.FollowUpInterval
FROM Patients p
    INNER JOIN Referrals r ON p.ID = r.FK_PatientID
    INNER JOIN Visits v ON ON r.ID = v.FK_Referral_ID
    INNER JOIN (SELECT r.FK_Patient_ID, MAX(v.Date) AS "Date"
                FROM Referrals r 
                INNER JOIN Visits v ON r.ID = v.FK_Referral_ID
                GROUP BY 
                r.FK_Patient_ID
                ) x ON p.ID = x.FK_Patient_ID AND v.Date = x.Date
于 2014-11-08T13:28:01.840 に答える