sql最近的日期

时间:2014-05-14 18:09:01

标签: sql date

我有两个表 - tblDividendData和tblStockPrice - 我一直在尝试构建一个查询来从tblDividendData中提取字段以及来自tblStockPrice的最新收盘价。我不是SQL大师,所以我有点担心,我在这里分享我的尝试,但我花了好几个小时,似乎在尝试一切,我无法让它返回正确的结果。我的查询如下:

SELECT  tblDividendData.divOrganization, 
    tblDividendData.divExDividendDate, 
    (SELECT Close 
     FROM tblStockPrice s
     WHERE Date = ( SELECT MAX(Date) 
                    FROM tblStockPrice 
                    WHERE s.Date <= tblDividendData.divExDividendDate
                    AND s.CompanyID=tblDividendData.divOrganization)) AS Close
FROM tblDividendData

这会返回收盘价字段的一些数据,但它不正确:只有当divExDividendDate大于所有tblStockPrice.Date时才会返回tblStockPrice.Close。

我真的很感激为什么我不能让这个工作得到帮助。我在这里使用Schema和查询设置了一个SQLFiddle:http://www.sqlfiddle.com/#!15/6ae82/2/0

查询在SQLFiddle上运行,但我注意到它将Access(我实际上将它放在一起)带到了膝盖。

1 个答案:

答案 0 :(得分:1)

你很亲密。试试这个SQL:

SELECT  tblDividendData.divOrganization, 
        tblDividendData.divExDividendDate, 
        (SELECT Close 
         FROM tblStockPrice s
         WHERE Date = ( SELECT MAX(Date) 
                        FROM tblStockPrice 
                        WHERE Date <= tblDividendData.divExDividendDate
                        AND CompanyID=tblDividendData.divOrganization)
         AND CompanyID=tblDividendData.divOrganization        
        ) AS Close
FROM tblDividendData

有两个问题:

  1. 在您查找MAX(Date)的子查询中,您在s.子句中使用了WHERE前缀。这是不正确的,因为它与外部查询中的表匹配。这可能是为什么它在Access中会很慢的原因。

  2. 找到CompanyID后,您需要再次按MAX(Date)进行过滤。