2016-11-18 2 views
1

を選択し、私は、以下のサブクエリを持っている:PostgresSQLの集計関数2つの対応するフィールド

LEFT OUTER JOIN 
(
    SELECT 
     MAX(testresult."testdate") AS beforeresult, 
     testschedule."test_id", 
     testschedule."asset_id", 
     testschedule."testdate" AS testdate, 
     testschedule."testresult_id" as scheduleresult_id           
    FROM 
     "public"."testresult" testresult 
     INNER JOIN "public"."testschedule" testschedule 
      ON testschedule."asset_id" = testresult."asset_id" 
      AND testschedule."test_id" = testresult."test_id" 
    WHERE 
     "testresult"."client_id" = 25368272 
     AND testresult."testdate" < testschedule."mintolerancedate" 
     AND testschedule."testdate" > '2016-10-01' 
     AND testschedule."testdate" < '2016-10-20' 
    GROUP BY 
     testschedule."asset_id", 
     testschedule."test_id", 
     testschedule."testdate", 
     testschedule."testresult_id" 
    ORDER BY MAX(testresult."testdate") 
) lasttr 
    ON "testschedule"."asset_id" = lasttr."asset_id" 
    AND "testschedule"."test_id" = lasttr."test_id" 
    AND testschedule."testdate" = lasttr.testdate 

これは私に正しいtestdateを与えます。しかし、私はまた、日付に対応する "testresult_id"というテストスケジュールが必要です。上記のクエリからこれを選択する方法はありますか?事前

答えて

0

ありがとうございます左が参加横行い、ウィンドウ関数または最新バージョンにいじることができます。

LEFT JOIN LATERAL 
(SELECT ts."test_id", ts."asset_id", ts."testdate" AS testdate, ts."testresult_id" as scheduleresult_id, 
     tr.* 
FROM "public"."testresult" tr INNER JOIN 
     "public"."testschedule" ts 
     ON ts."asset_id" = tr."asset_id" and ts."test_id" = tr."test_id" 
WHERE tr."client_id" = 25368272 AND 
     tr."testdate" < ts."mintolerancedate" AND 
     ts."testdate" > '2016-10-01' and ts."testdate" < '2016-10-20' AND 
     "testschedule"."asset_id" = ts."asset_id" AND 
     "testschedule"."test_id" = ts."test_id" 
ORDER BY tr."testdate" DESC 
FETCH FIRST 1 ROW ONLY 
) lasttr 

横には参加FROM句で相関サブクエリのようなものです。あなたは好きなだけ多くの列を返すことができます。結合条件はサブクエリのWHERE節にあるため、ON句はありません。

+0

クイックレスポンスありがとうございますが、私はまだtestschedule "testresult_id"フィールドを取得していません。基本的には、どうにかしてtestdateのMAX集約関数に結合する必要がありますが、私はその作業を行うようには見えません。私の見積もりは、私が見落としている単純なものです。 – user3075171

+0

別の参加は必要ありません。横結合は、あなたが望むことをする必要があります。 –

+0

"test_id" = "test_id" = ts。 "asset_id""testschedule"。 "test_id" = ts。 "test_id"を実行したときに、これを実行すると、 group by節を追加すると、「入力の終わりに構文エラーが発生します」というメッセージが表示されます。 "ON"句を追加すると、実行されますが、各グループの結果は表示されません。 – user3075171

関連する問題