[英]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
);`
您可能需要使用ASC
或DESC
来收集正确的订单
试试这个模式:
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.