SQL - 仅选择WHERE子句

时间:2016-07-08 04:29:08

标签: sql sql-server max

我一直试图从我们的数据库中获取一些数据,但是当我只需要为每种文件类型获取最新的文件上载时就会卡住。我在使用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
))

对不起,我是一个菜鸟,所以这可能很简单,但我只是在学习这些东西,因为我独自一人..

2 个答案:

答案 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 ;