从表中选择多个行,其中字段是最大日期

时间:2015-09-23 19:15:07

标签: sql sql-server maxdate

我有一个名为Product的表。我需要选择所有具有MAX ManufatureDate的产品记录。

以下是表格数据的示例:

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

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

此表中有100万条记录:

以下是我目前的做法:

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

如果想要比在where子句中进行子选择要好得多。或者这与在where子句中进行子选择完全相同?我不确定是否为每一行运行查询,无论是否sqlserver将变量值存储在内存中。

3 个答案:

答案 0 :(得分:4)

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

内部选择语句选择最大日期,外部所有具有日期的产品。

答案 1 :(得分:0)

您可以使用子查询

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

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

答案 2 :(得分:0)

尝试这种模式:

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

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