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
);`
您可能需要使用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
本质上,使用window函数在内联视图中获取您要查找的数据,然后在外部查询中使用where子句来匹配它们。
我有一个名为 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
);`
您可能需要使用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
本质上,使用window函数在内联视图中获取您要查找的数据,然后在外部查询中使用where子句来匹配它们。