Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS Access:查询分组依据,但显示所有字段_Sql_Ms Access - Fatal编程技术网

Sql MS Access:查询分组依据,但显示所有字段

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

因为我可以在不同的日期多次订购一个项目,所以我只想返回最近的日期,但仍然包括所有字段

表格

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中也不起作用,但我可能做得不好。谢谢