SQL嵌套查询,最大值,分组

SQL嵌套查询,最大值,分组,sql,ms-access,Sql,Ms Access,我的表(名为Inventory)如下所示: SELECT InventoryType, LocationID, InventoryLevel, SafetyStock, MaxLevel, ModifiedAt FROM Inventory WHERE LocationID = 2 AND ModifiedAt IN (SELECT TOP 1 ModifiedAt FROM Inventory WHERE LocationID = 2

我的表(名为Inventory)如下所示:

SELECT InventoryType, LocationID, InventoryLevel,
       SafetyStock, MaxLevel, ModifiedAt
FROM Inventory
WHERE LocationID = 2 AND ModifiedAt IN
     (SELECT TOP 1 ModifiedAt 
      FROM Inventory
      WHERE LocationID = 2
      ORDER BY ModifiedAt DESC);
InventoryType、LocationID、InventoryLevel、SafetyStock、MaxLevel、ModifiedAt

擦除器,1,14,3,15,11-2014

擦除器,2,4,10,50,10-2014

擦除器,2,5,10,50,11-2014

铅笔,1,10,5,45,11-2014

铅笔,2,23,15,50,11-2014

Pens,1,9,10,50,11-2014

Pens,2,55,10,50,12-2014

有三个主键:InventoryType、LocationID和ModifiedAt

给定指定的LocationID,我希望查询返回每个不同InventoryType的all,其中返回的每个元组的日期是具有指定LocationID的给定库存类型的记录中最近的ModifiedAt日期。例如,LocationID=2将返回:

InventoryType、LocationID、InventoryLevel、SafetyStock、MaxLevel、ModifiedAt

擦除器,2,5,10,50,11-2014

铅笔,2,23,15,50,11-2014

Pens,2,55,10,50,12-2014

我迄今为止的努力如下:

SELECT InventoryType, LocationID, InventoryLevel,
       SafetyStock, MaxLevel, ModifiedAt
FROM Inventory
WHERE LocationID = 2 AND ModifiedAt IN
     (SELECT TOP 1 ModifiedAt 
      FROM Inventory
      WHERE LocationID = 2
      ORDER BY ModifiedAt DESC);
我的查询返回:

InventoryType,LocationID,InventoryLevel,SafetyStock,MaxLevel,ModifiedAt
Pens,2,55,10,50,12-2014

任何帮助都将不胜感激。

您需要一个相关的子查询。请尝试以下方法:

SELECT InventoryType, LocationID, InventoryLevel, SafetyStock, MaxLevel, ModifiedAt
FROM Inventory as i
WHERE LocationID = 2 AND
      ModifiedAt IN (SELECT TOP 1 i2.ModifiedAt
                     FROM Inventory as i2
                     WHERE i2.LocationID = 2 AND i2.InventoryType = i.InventoryType
                     ORDER BY i2.ModifiedAt DESC
                    );

使用
SELECT DISTINCT
选择DISTINCT
InventoryType

SELECT DISTINCT InventoryType, LocationID, 
InventoryLevel, SafetyStock, MaxLevel, ModifiedAt
FROM Inventory
WHERE LocationID = 2
AND ModifiedAt IN 
(SELECT TOP 1 ModifiedAt FROM Inventory WHERE LocationID = 2 ORDER BY ModifiedAt DESC)

我糟糕的,出于某种原因被转录成MonthYear。无论如何,这似乎正是我所需要的。非常感谢。