MIN()函数Ms Access

时间:2014-07-21 09:45:53

标签: sql ms-access access-vba ms-access-2007 aggregate-functions

这是我创建ms访问查询的示例sql查询。我想在min(DATE)只获得一行。怎么当我运行我的查询我得到多行。任何点击?感谢

SELECT tblWarehouseItem.whiItemName,
       tblWarehouseItem.whiQty, 
       tblWarehouseItem.whiPrice, 
       Min(tblWarehouseItem.whiDateIn) AS MinOfwhiDateIn, 
       tblWarehouseItem.whiExpiryDate, 
       tblWarehouseItem.whiwrhID
FROM tblWarehouseItem
GROUP BY tblWarehouseItem.whiDateIn,
         tblWarehouseItem.whiItemName,
         tblWarehouseItem.whiQty,
         tblWarehouseItem.whiPrice,
         tblWarehouseItem.whiExpiryDate,
         tblWarehouseItem.whiwrhID;

如果我有我的sql代码,那就应该正常工作:

SELECT MIN(tblWarehouseItem.whiDateIn) FROM tblWarehouseItem;

2 个答案:

答案 0 :(得分:3)

在第一个查询中,您按多个列进行分组。这意味着将为每个组计算最小值,这反过来意味着您可能有多个行。另一方面,第二个查询只会从所有行中获取指定列的最小值,因此结果集中只有一行。

下面显示了一个简单的例子来说明上述内容。

Table:
Key Value
1  1
1  2
2  3
2  4

Group By Key

GroupKey MinValue
1        = min(1,2) = 1 -> Row 1
2        = min(3,4) = 3 -> Row 2

Min (Value)

MinValue
=min(1,2,3,4) = 1 -> Row 1

对于上面这样的表,如果要选择所有行并且还显示整个表而不是每个组的最小值,则可以执行以下操作:

select key, (select min(value) from table)
from table

答案 1 :(得分:0)

SELECT WI.*
FROM tblWarehouseItem AS WI INNER JOIN (SELECT whiimtID, MIN(tblWarehouseItem.whiDateIn) AS whiDateIn
          FROM tblWarehouseItem
        GROUP BY whiimtID)  AS MinWI ON (WI.whiDateIn = MinWI.whiDateIn) AND (WI.whiimtID = MinWI.whiimtID);