我有一个名为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将变量值存储在内存中。
答案 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
);`
您可能需要使用ASC
或DESC
来收集正确的订单
答案 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子句来匹配它们。