我一直试图从我们的数据库中获取一些数据,但是当我只需要为每种文件类型获取最新的文件上载时就会卡住。我在使用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
))
对不起,我是一个菜鸟,所以这可能很简单,但我只是在学习这些东西,因为我独自一人..
答案 0 :(得分: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
。除非可能有没有文件的个人资料(这就是为什么OUTER
适用而不是CROSS
)。
答案 1 :(得分:0)
显而易见的是:
SELECT * FROM
(SELECT * FROM db_file ORDER BY dateCreated DESC) AS files1
GROUP BY fileTypeID ;