0

これがselectステートメントです

SELECT dbo.tbl_inspectors.user_firstname, 
       dbo.tbl_inspectors.user_lastname, 
       dbo.tbl_inspectors.user_loc, 
       dbo.tbl_appraisals.appPartA, 
       dbo.tbl_appraisals.appPartB, 
       dbo.tbl_appraisals.appAppraised, 
       dbo.tbl_appraisals.appFinalized,
       dbo.tbl_appraisals.appDate,
       dbo.tbl_inspectors.appProcStart, 
       dbo.tbl_inspectors.appDue, 
       dbo.tbl_inspectors.inspAdhocStaff, 
       dbo.tbl_inspectors.access_id, 
       dbo.tbl_appraisals.appraiseID, dbo.tbl_inspectors.user_id
FROM   dbo.tbl_inspectors 
       LEFT OUTER JOIN
       dbo.tbl_appraisals ON dbo.tbl_inspectors.user_id = bo.tbl_appraisals.inspectID

tbl_appraisals テーブルの tbl_inspectors.user_id に対して複数の結果がある場合、インスペクターごとに複数の結果が得られます。tbl_inspectors の user_id に対して tbl_appraisals から最新の一致を取得したいのですが、どうすれば簡単に達成できますか?

PS tbl_appraisals.appDate は、tbl_appraisals からの最新の結果を決定するフィールドです。

4

1 に答える 1

1

エンジンがMySQLではないと仮定すると...

これは「グループごとのTOP 1」の問題です

SELECT
    *
FROM
    (
    SELECT I.user_firstname, 
           I.user_lastname, 
           I.user_loc, 
           A.appPartA, 
           A.appPartB, 
           A.appAppraised, 
           A.appFinalized,
           A.appDate,
           I.appProcStart, 
           I.appDue, 
           I.inspAdhocStaff, 
           I.access_id, 
           A.appraiseID,
           I.USER_ID,
           ROW_NUMBER() OVER (PARTITION BY I.user_id ORDER BY COALESCE(A.appDate, '19000101') DESC) AS rn
    FROM   dbo.tbl_inspectors I
           LEFT OUTER JOIN
           dbo.tbl_appraisals A ON I.user_id = A.inspectID
    ) X
WHERE
    X.rn = 1
于 2013-02-21T10:11:43.227 に答える