Sql MS Access:查询分组依据,但显示所有字段
我有一张订购物品的表格。 表字段:PONumber、OrderDate、itemNumber、Description、Cost 因为我可以在不同的日期多次订购一个项目,所以我只想返回最近的日期,但仍然包括所有字段 表格Sql MS Access:查询分组依据,但显示所有字段,sql,ms-access,Sql,Ms Access,我有一张订购物品的表格。 表字段:PONumber、OrderDate、itemNumber、Description、Cost 因为我可以在不同的日期多次订购一个项目,所以我只想返回最近的日期,但仍然包括所有字段 表格 PONumber OrderDate itemNumber Description Cost 123 01/01/2016 A235 Bolt 1.13 142 02/22/2016 A235
PONumber OrderDate itemNumber Description Cost
123 01/01/2016 A235 Bolt 1.13
142 02/22/2016 A235 Blot 2.10
166 03/01/2016 A444 Screw 1.22
411
返回
PONumber OrderDate itemNumber Description Cost
142 02/22/2016 A235 Blot 2.10
166 03/01/2016 A444 Screw 1.22
我尝试了一个总计查询,但我必须删除成本字段,否则它会显示所有记录,我需要显示成本
SELECT PONumber, Max(OrderDate), itemNumber, Description, Cost
FROM tblItemsOrdered
GROUP BY PONumber, OrderDate, itemNumber, Description, Cost;
这不是
分组依据
。您需要所有列,因此请考虑where
,以进行筛选:
select o.*
from tblItemsOrdered as o
where o.OrderDate = (select max(o2.OrderDate)
from tblItemsOrdered as o2
where o2.itemNumber = o.itemNumber
);
注意:如果项目在最近的日期多次订购,则将返回所有行。这不是
分组依据。您需要所有列,因此请考虑where
,以进行筛选:
select o.*
from tblItemsOrdered as o
where o.OrderDate = (select max(o2.OrderDate)
from tblItemsOrdered as o2
where o2.itemNumber = o.itemNumber
);
注意:如果项目在最近的日期多次订购,则将返回所有行。在子查询中查找每个项目的最新订购日期,并将其与原始表连接,如下所示:
select t1.*
from tblItemsOrdered t1
inner join (
SELECT itemNumber, Max(OrderDate) as Max_OrderDate
FROM tblItemsOrdered
GROUP BY itemNumber
) t2 on t1.itemNumber = t2.itemNumber
and t1.OrderDate = t2.Max_OrderDate;
请注意,如果所有行都具有最新的orderDate,那么这将为相同的itemNumber返回多行
编辑:
或者如果PONumber是唯一的:
select t1.*
from tblItemsOrdered t1
inner join (
select t1.itemNumber, max(t1.PONumber) as max_PONumber
from tblItemsOrdered t1
inner join (
SELECT itemNumber, Max(OrderDate) as Max_OrderDate
FROM tblItemsOrdered
GROUP BY itemNumber
) t2 on t1.itemNumber = t2.itemNumber
and t1.OrderDate = t2.Max_OrderDate
group by t1.itemNumber
) t2 on t1.itemNumber = t2.itemNumber
and t1.PONumber = t2.max_PONumber;
在子查询中查找每个项目的最新订单日期,并将其与原始表连接,如下所示:
select t1.*
from tblItemsOrdered t1
inner join (
SELECT itemNumber, Max(OrderDate) as Max_OrderDate
FROM tblItemsOrdered
GROUP BY itemNumber
) t2 on t1.itemNumber = t2.itemNumber
and t1.OrderDate = t2.Max_OrderDate;
请注意,如果所有行都具有最新的orderDate,那么这将为相同的itemNumber返回多行
编辑:
或者如果PONumber是唯一的:
select t1.*
from tblItemsOrdered t1
inner join (
select t1.itemNumber, max(t1.PONumber) as max_PONumber
from tblItemsOrdered t1
inner join (
SELECT itemNumber, Max(OrderDate) as Max_OrderDate
FROM tblItemsOrdered
GROUP BY itemNumber
) t2 on t1.itemNumber = t2.itemNumber
and t1.OrderDate = t2.Max_OrderDate
group by t1.itemNumber
) t2 on t1.itemNumber = t2.itemNumber
and t1.PONumber = t2.max_PONumber;
此查询在MS Access中有效吗?从我的经验来看,这有点有限?我认为它应该很好用。还有,你为什么不试试看它的效果呢?上次我试过,别名在MS Access 2016中不起作用,我必须写出每个tableName.columnName。但可能是我做错了什么…?看起来内部联接子查询上的tblItemsOrdered t2
中的代码片段可能丢失了。啊,我现在在子查询后看到别名/引用。此查询在MS Access中有效吗?从我的经验来看,这有点有限?我认为它应该很好用。还有,你为什么不试试看它的效果呢?上次我试过,别名在MS Access 2016中不起作用,我必须写出每个tableName.columnName。但可能是我做错了什么…?看起来内部联接子查询上的tblItemsOrdered t2中的代码片段可能丢失了。啊,我现在在子查询后看到别名/引用。我认为别名在MS Access中也不起作用,但我可能是做错了。谢谢我认为别名在MS Access中也不起作用,但我可能做得不好。谢谢