2016-07-08 30 views
0

データベースからデータを取得しようとしていましたが、各ファイルタイプに対して最新のファイルをアップロードするだけで済むようになりました。 WHERE句を使用する前にこれを行いましたが、今回はファイルタイプを決定するために必要なテーブルが追加されています。SQL - WHERE句で最新のレコードのみを選択する

私のクエリはこれまでのようになり、このユーザー用に6つのレコードが取得されています(2x filetypeNo4および4x filetypeNo2)。

SELECT db_file.fileID 
    ,db_profile.NAME 
    ,db_applicationFileType.fileTypeID 
    ,> db_file.dateCreated 
FROM db_file 
LEFT JOIN db_applicationFiles 
    ON db_file.fileID = db_applicationFiles.fileID 
LEFT JOIN db_profile 
    ON db_applicationFiles.profileID = db_profile.profileID 
LEFT JOIN db_applicationFileType 
    ON db_applicationFiles.fileTypeID = > > db_applicationFileType.fileTypeID 
WHERE db_profile.profileID IN ('19456') 
    AND db_applicationFileType.fileTypeID IN ('2','4') 

私が働いていない。このように見ているWHERE句があります。

(db_file.dateCreated IS NULL 
OR db_file.dateCreated = (
    SELECT MAX(db_file.dateCreated) 
    FROM db_file left join 
db_applicationFiles on db_file.fileID = db_applicationFiles.fileID 
    WHERE db_applicationFileType.fileTypeID = db_applicationFiles.FiletypeID 
)) 

私は、これは本当に簡単かもしれないが、私は私に行くように、私はちょうどこのようなものを学ぶのnoob午前申し訳ありませんが

+1

... –

+2

直接あなたの質問に関連しているが、 '' WHERE db_applicationFileType.fileTypeID = db_applicationFiles.FiletypeID'でdb_applicationFiles'をします参加残っていないサンプルデータと期待される結果を提供してください。このテーブルを '内部結合 'として扱います。これがあなたの望むものかどうかは分かりません。 – ughai

答えて

0
SELECT 
    ff.fileID, 
    pf.NAME, 
    ff.fileTypeID, 
    ff.dateCreated 
FROM db_profile pf 
OUTER APPLY 
(
    SELECT TOP 1 af.fileTypeID, df.dateCreated, df.fileID 
    FROM db_file df 
    INNER JOIN db_applicationFiles af 
    ON df.fileID = af.fileID 
    WHERE af.profileID = pf.profileID 
    AND af.fileTypeID IN ('2','4') 
    ORDER BY create_date DESC 
) ff 
WHERE pf.profileID IN ('19456') 

あなたのすべての結合が実際にINNERのようです。ファイルなしのプロファイルがない限り、CROSSの代わりにOUTERが適用されます。

0

明白についてどのような:

SELECT * FROM 
    (SELECT * FROM db_file ORDER BY dateCreated DESC) AS files1 
GROUP BY fileTypeID ; 
+0

このコードのポイントは実際にはあまり明らかではありません。これが100%起こるかどうかは不明ですが、オプティマイザは_subquery_ _top_を使わずに 'order by'を完全に無視するかもしれません。 –

関連する問題