2017-03-31 104 views
1

我正試圖顯示製造過程的重要日期。有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

回答

3

將像這樣的東西解決你的問題?

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

相關問題