繁体   English   中英

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

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

我有一个称为产品的表。 我需要选择所有具有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

这是结果应为的结果,因为所有记录的最大日期为2015年5月1日,并且这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是否将变量值存储在内存中。

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

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

您可以使用subQuery

 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

本质上,使用窗口函数在嵌入式视图中获取所需的数据,然后在外部查询中使用where子句进行匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM