Select 来自 table 的多行,其中字段是最大日期

Select multiple rows from a table where field is the max date

我有一个名为 Product 的 table。我需要 select 所有具有 MAX ManufatureDate 的产品记录。

这是 table 数据的示例:

Id  ProductName     ManufactureDate
1   Car             01-01-2015
2   Truck           05-01-2015
3   Computer        05-01-2015
4   Phone           02-01-2015
5   Chair           03-01-2015

这是结果应该是什么,因为所有记录的最大日期是 05-01-2015 并且这 2 条记录有这个最大日期:

Id  ProductName     ManufactureDate
2   Truck           05-01-2015
3   Computer        05-01-2015

我能想到的唯一方法是首先对整个 table 进行查询以找出最大日期,然后将其存储在变量@MaxManufatureDate 中。然后执行第二个查询,其中 ManufactureDate=@MaxManufactureDate。有人告诉我有更好的方法。

这里有100万+条记录table:

这是我目前的做法:

@MaxManufactureDate = select max(ManufactureDate) from Product
select * from Product where ManufactureDate = @MaxManufactureDate

If figure 这比在 where 子句中做一个 subselect 好多了。或者这与在 where 子句中执行 subselect 完全一样吗?我不确定查询是否为每一行获取 运行,或者 sqlserver 是否将变量值存储在内存中。

select * from product
where manufactureDate = (select max(manufactureDate) from product)

内层select-语句selects最大日期,外层所有有该日期的产品。

您可以使用子查询

 SELECT * 
 FROM Product 
 WHERE ManufactureDate = (
   SELECT ManufactureDate 
   FROM Product 
   ORDER BY ManufactureDate 
   LIMIT 1
 );`

您可能需要使用ASCDESC来收集正确的订单

试试这个模式:

SELECT Id, ProductName, ManufactureDate
FROM (
    SELECT Id, ProductName, ManufactureDate, MAX(ManufactureDate)OVER() AS MaxManufactureDate
    FROM Product P
    ) P
WHERE P.MaxManufactureDate = P.ManufactureDate

本质上,使用window函数在内联视图中获取您要查找的数据,然后在外部查询中使用where子句来匹配它们。