【问题标题】:sql most recent datesql 最近日期
【发布时间】:2014-05-14 18:09:01
【问题描述】:

我有两个表——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(我实际上将其放在一起)陷入困境。

【问题讨论】:

    标签: sql date


    【解决方案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) 的子查询中,您在WHERE 子句中使用了s. 前缀。这是不正确的,因为它与外部查询中的表匹配。这可能是 Access 速度慢的一个原因。

    2. 找到MAX(Date)后,需要再次过滤CompanyID

    【讨论】:

    • 谢谢,大卫。非常感激!但是,有趣的是,根据您的 SQL,即使没有“s”别名,它似乎仍然会使 Access 窒息。我想我得再调查一下……
    • 嗯。在 Postgresql 中使用表中的完整数据(tblStockPrices 中超过 4000 条记录)进行了尝试,它很有魅力,所以绝对是访问限制/问题。
    猜你喜欢
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多