SELECT MAX Date T-SQL子查询

TGu*_*ond 2 sql t-sql sql-server subquery

我试图使用这样的查询从表中选择行

SELECT     pminf_member, pminf_schmem
         , pminf_date, pminf_fund
         , pminf_cont, pminf_rate
         , pminf_matrix
FROM   pe_minvf
WHERE (pminf_member = 4380) 
  AND (pminf_schmem = 'M') 
  AND (pminf_date <= '03/30/2011')
  AND (pminf_date =
           (SELECT MAX(pminf_date) AS Expr1
            FROM   pe_minvf AS pe_minvf_1
            WHERE  (pminf_member = 4380)
           )
       )
  AND (pminf_fund = 'LIFESTYLE')
Run Code Online (Sandbox Code Playgroud)

我应该从子查询(我认为)得到的是'01/01/2011'的日期,但是当我运行我的查询时,我得不到任何结果.

如果我用硬编码日期替换子查询,我会返回正确的行.例如

SELECT  pminf_member, pminf_schmem
      , pminf_date, pminf_fund
      , pminf_cont, pminf_rate
      , pminf_matrix
FROM  pe_minvf
WHERE (pminf_member = 4380)
  AND (pminf_schmem = 'M')
  AND (pminf_date <= '03/30/2011')
  AND (pminf_date = '01/01/2011')
  AND (pminf_fund = 'LIFESTYLE')
Run Code Online (Sandbox Code Playgroud)

此查询返回正确的结果.

任何想法为什么子查询没有返回最大日期或如果是,为什么我没有返回任何行?

谢谢,特里斯坦

Qua*_*noi 6

您可以根据查询中的不同条件进行过滤.

pminf_fund = 'LIFESTYLE'在子查询中,但pminf_schmem = 'M'在外部查询中.

此外,您还限制外部查询中的日期,而不是在子查询中执行此操作.

如果您只需要最新的'03/30/2011'记录,请使用:

SELECT  TOP 1
        pminf_member, pminf_schmem, pminf_date, pminf_fund, pminf_cont, pminf_rate, pminf_matrix
FROM    pe_minvf
WHERE   pminf_member = 4380
        AND pminf_schmem = 'M'
        AND pminf_fund = 'LIFESTYLE'
        AND pminf_date <= '03/30/2011'
ORDER BY
        pminf_date DESC
Run Code Online (Sandbox Code Playgroud)