获取最大值的记录并显示该记录中的其他字段

问题描述:

我正试图显示制造过程的重要日期。有10个房间执行相同的过程。每次过程开始时都会分配一个新的循环编号。我想显示每个房间当前(即最大)周期的重要日期。获取最大值的记录并显示该记录中的其他字段

到目前为止,我已经整理了一个查询,它将显示整体最大周期数的重要日期(我的代码在下面),但我想添加一个附加标准,以便查看最大周期数的信息在每个房间

SELECT 
    [dbo_batch_overview5].[rm], 
    [dbo_batch_overview5].[cyc], 
    [dbo_batch_overview5].[bpr], 
    [dbo_batch_overview5].[plug_date], 
    [dbo_batch_overview5].[trig_date], 
    [dbo_batch_overview5].[flush_date], 
    [dbo_batch_overview5].[harv_date] 
FROM dbo_batch_overview5 
WHERE ((([dbo_batch_overview5].[cyc])=(SELECT Max([dbo_batch_overview5].[cyc]) 
FROM [dbo_batch_overview5] 
))); 

我想我需要添加一个GROUP BY语句来指定,我希望看到在这间客房[RM]字段每个独特的项的最大周期数,这里是我的尝试代码在我认为我需要的声明中包括:

SELECT 
    [dbo_batch_overview5].[rm], 
    [dbo_batch_overview5].[cyc], 
    [dbo_batch_overview5].[bpr], 
    [dbo_batch_overview5].[plug_date], 
    [dbo_batch_overview5].[trig_date], 
    [dbo_batch_overview5].[flush_date], 
    [dbo_batch_overview5].[harv_date] 
FROM dbo_batch_overview5 
WHERE ((([dbo_batch_overview5].[cyc])=(SELECT Max([dbo_batch_overview5].[cyc]) 
FROM [dbo_batch_overview5] 
GROUP BY [dbo_batch_overview5].[rm] 
))); 

当我尝试上面的代码时,出现错误,说我的子查询返回多个值。谁能告诉我我做错了什么?

按照要求,这里是一些示例数据

rm cyc bpr   clone_date plug_date trig_date harv_date 
1 13 20161031-OP 10/31/2016 11/16/2016 11/22/2016 1/12/2017 
1 13 20161101-EV 11/1/2016 11/16/2016 11/22/2016 1/13/2017 
1 13 20161031-CG 10/31/2016 11/16/2016 11/22/2016 1/13/2017 
1 13 20161101-CB 11/1/2016 11/16/2016 11/22/2016 1/12/2017 
1 13 20161031-VO 10/31/2016 11/16/2016 11/22/2016 1/13/2017 
1 14 20170104-CG 1/4/2017 1/23/2017 1/28/2017 
1 14 20170104-CB 1/4/2017 1/23/2017 1/28/2017 
1 14 20170106-AV 1/6/2017 1/23/2017 1/28/2017 
1 14 20170106-MN 1/6/2017 1/23/2017 1/28/2017 
2 7 20150925-ST 9/25/2015 10/10/2015 10/19/2015 12/16/2015 
2 7 20150924-AL 9/24/2015 10/10/2015 10/19/2015 12/16/2015 
2 7 20150924-EA 9/24/2015 10/10/2015 10/19/2015 12/21/2015 
2 7 20150928-LM 9/28/2015 10/10/2015 10/19/2015 12/22/2015 
2 7 20150928-HM 9/28/2015 10/10/2015 10/19/2015 12/19/2015 
2 8 20151214-CG 12/14/2015 12/30/2015 1/7/2016 3/14/2016 
2 8 20151214-RM 12/14/2015 12/30/2015 1/7/2016 3/15/2016 
2 8 20151215-CB 12/15/2015 12/30/2015 1/7/2016 3/8/2016 

在上述例子中,我只希望看到与周期14中的房间1和周期8在房间相关联的记录2

+0

您可以添加一些示例数据吗?您可以使用[dbfiddle](http://dbfiddle.uk/)[创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –

+0

虽然我会建议加入子查询,但这可能是你正在寻找的东西 - ('([(dbo_batch_overview5)。[cyc])(SELECT Max ...''' – Anand

+1

@Mauricio Arias Olave I无法弄清楚如何使用dbfiddle,但是我将示例数据添加到了我的原始问题上面 – DylanHarding

将像这样的东西解决你的问题?

SELECT 
a.[rm], 
a.[cyc], 
a.[bpr], 
a.[plug_date], 
a.[trig_date], 
a.[flush_date], 
a.[harv_date] 
FROM dbo_batch_overview5 a 
    INNER JOIN (SELECT Max([cyc]) AS maxcyc, 
         rm as rm2 
       FROM [dbo_batch_overview5] 
       GROUP BY [rm])c 
     ON a.rm = c.rm2 AND a.cyc = c.maxcyc 
+0

我不认为CTE在MS Access中被支持,我会在'INNER JOIN'中移动这个查询。 – trincot

+0

@trincot对不起,我改变了查询以不使用CTE。这项工作? –

+0

我没有MS Access,但它看起来不错。 – trincot