【问题标题】:Select all from max date从最大日期中选择所有
【发布时间】:2014-10-31 19:34:39
【问题描述】:

早上好,

我正在编写一个 SQL 查询,查询最新的金属价格以及它们被放入数据库的最新日期。下表示例:

ID    Date Created
1     01/01/01 01:01
2     01/01/01 01:02
3     01/01/01 01:03
4     01/01/01 01:04
1     02/01/01 01:01
2     02/01/01 01:02

因此,我想要以下结果:

ID    Date Created
1     02/01/01 01:01
2     02/01/01 01:02

当我运行以下查询时,它只是给了我最后一个输入日期库的查询,因此从上面的示例中它将是 ID 2 DateCreated 02/01/01 01:02。我正在使用的查询如下:

SELECT mp.MetalSourceID, ROUND(mp.PriceInPounds,2), 
mp.UnitPrice, mp.HighUnitPrice, mp.PreviousUnitPrice, 
mp.PreviousHighUnitPrice, ms.MetalSourceName, 
ms.UnitBasis, cu.Currency 
FROM tblMetalPrice  AS mp
INNER JOIN tblMetalSource AS ms
ON tblMetalPrice.MetalSourceID = tblMetalSource.MetalSourceID 
INNER JOIN tblCurrency AS cu
ON tblMetalSource.CurrencyID = tblCurrency.CurrencyID  
WHERE DateCreated = (SELECT MAX (DateCreated) FROM tblMetalPrice)
GROUP BY mp.MetalSourceID;

任何人都可以帮助它让我发疯不知道这个星期五早上我的大脑已经死了。

谢谢

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

where 子句使用相关子查询:

WHERE DateCreated = (SELECT MAX(DateCreated) FROM tblMetalPrice mp2 WHERE mp2.id = mp.id)

【讨论】:

    【解决方案2】:

    您可以加入子查询,我认为您不需要 group by,或者实际上不需要 where 子句(因为它由 join 处理)。

    SELECT mp.MetalSourceID, 
           ROUND(mp.PriceInPounds,2), 
           mp.UnitPrice, 
           mp.HighUnitPrice, 
           mp.PreviousUnitPrice, 
           mp.PreviousHighUnitPrice, 
           ms.MetalSourceName, 
           ms.UnitBasis, 
           cu.Currency 
    FROM tblMetalPrice  AS mp
    INNER JOIN tblMetalSource AS ms
        ON tblMetalPrice.MetalSourceID = tblMetalSource.MetalSourceID 
    INNER JOIN tblCurrency AS cu
        ON tblMetalSource.CurrencyID = tblCurrency.CurrencyID  
    INNER JOIN (SELECT ID,MAX(DateCreated) AS maxdate FROM tblMetalPrice GROUP BY ID) AS md
        ON md.ID = mp.ID 
        AND md.maxdate = mp.DateCreated
    

    【讨论】:

      【解决方案3】:

      with maxDates as (select max(datecreated) maxd, ids grp , count(1) members from s_tableA group by ids having count(1) > 1) select ids, datecreated from s_tableA,maxDates where maxd = datecreated and ids = grp;

      此查询将给出您想要的结果。相关子查询往往会消耗大量处理时间,因为对于外部查询的每一行,它必须处理内部查询中的所有行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 2018-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多