Sql 从“最大日期”中选择“全部”

Sql 从“最大日期”中选择“全部”,sql,sql-server,tsql,Sql,Sql Server,Tsql,早上好 我正在编写一个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

早上好

我正在编写一个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: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;
谁能帮我个忙吗?这周五早上我的脑子都快死了


谢谢

对where子句使用相关子查询:


您可以在子查询上进行连接,我认为您不需要GROUPBY,或者实际上不需要where子句,因为这是由连接处理的

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
以maxDates作为 选择maxdatecreated maxd,ids grp,count1 members from s s_tableA group by ids have count1>1 选择ID、从s_表创建的日期、maxDates 其中maxd=datecreated,ids=grp


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

请参阅DBA.StackExchange上的问题:
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