本文說明如何使用最高級的值查詢和總計查詢來尋找一組記錄中的最新或最早日期。 這可以幫助您回答各種業務問題,例如客戶上次下訂單的時間,或按城市劃分的哪五個季度最適合您的銷售。
本文內容
概觀
您可以使用最高值查詢來對資料進行排名,並檢閱排名最高的項目。 頂值查詢是一種選取查詢,它從結果頂端傳回指定數量或百分比的值,例如,網站上五個最受歡迎的頁面。 您可以針對任何類型的值使用最高值查詢,它們不一定是數字。
如果您想要在對資料進行排名之前對資料進行分組或摘要,則不需要使用最高值查詢。 例如,假設您需要尋找公司營運所在的每個城市的給定日期的銷售數字。 在此情況下,城市會變成類別 (您需要尋找每個城市) 的資料,因此您可以使用總計查詢。
當您使用最上位值查詢來尋找資料表或記錄群組中包含最新或最早日期的記錄時,您可以回答各種商務問題,例如:
- 
              誰最近銷售額最多? 
- 
              客戶最後一次下訂單是什麼時候? 
- 
              球隊接下來的三個生日是什麼時候? 
若要進行最高值查詢,請先建立選取查詢。 然後,根據您的問題對數據進行排序——無論您是在尋找頂部還是底部。 如果您需要將資料分組或彙總,請將選取查詢轉換為總計查詢。 然後,您可以使用彙總函數 ( 例如 Max 或 Min ) 傳回最高或最低值,或 First 或 Last 傳回最早或最晚日期。
本文假設您使用的日期值具有日期/時間資料類型。 如果您的日期值位於「文字」欄位中,則 。
請考慮使用篩選器,而不是最上層值查詢
如果您有特定的日期,過濾器通常會更好。 若要判斷是否應該建立最上層值查詢或套用篩選器,請考慮下列事項:
- 
                  如果您想要傳回日期相符、早於或晚於特定日期的所有記錄,請使用篩選器。 例如,若要查看 4 月至 7 月之間的銷售日期,請套用篩選器。 
- 
                  如果您想要傳回欄位中具有最新或最新日期的指定數量的記錄,而且您不知道確切的日期值,或者它們無關緊要,請建立最高級的值查詢。 例如,若要查看五個最佳銷售季度,請使用最高值查詢。 
如需建立和使用篩選器的詳細資訊,請參閱套用 篩選條件以檢視 Access 資料庫中的選取記錄一文。
準備範例資料以遵循範例
本文中的步驟會使用下列範例資料表中的資料。
「員工」表格
| 姓氏 | 名字 | 地址 | 城市 | 國家或 | 出生 日期 | 僱用 日期 | 
| 劉 | 沙東 | 1 Main St. | New York | Taiwan | 1968年2月5日 | 1994年6月10日 | 
| 赫洛 | 瓦利德 | 52 1st St. | Boston | Taiwan | 1957年5月22日 | 1996年11月22日 | 
| 盧珮佳 | 圭多 | 3122 75th Ave. S.W. | Seattle | Taiwan | 1960 年 11 月 11 日 | 2000年3月11日 | 
| 貝果 | 讓·菲利普 | 1 Contoso Blvd. | London | UK | 1964年3月22日 | 1998年6月22日 | 
| 價格 | 朱利安 | Calle Smith 2 | Mexico City | 墨西哥 | 1972 年 6 月 5 日 | 2002年1月5日 | 
| 休斯 | 克莉絲汀 | 南 75 街 3122 號 | 台北市 | Taiwan | 1970年1月23日 | 1999年4月23日 | 
| 萊利 | 史蒂夫 | 67 Big St. | Tampa | Taiwan | 1964 年 4 月 14 日 | 2004年10月14日 | 
| 伯克比 | 達納 | 2 個諾西包 | 苗栗縣 | Taiwan | 1959 年 10 月 29 日 | 1997年3月29日 | 
EventType 資料表
| 類型標識碼 | 事件 類型 | 
| 1 | 產品發布 | 
| 2 | 公司職能 | 
| 3 | 私人功能 | 
| 4 | 籌款活動 | 
| 5 | 貿易展覽 | 
| 6 | 演講 | 
| 7 | 音樂會 | 
| 8 | 陳 | 
| 9 | 街頭集市 | 
[客戶] 資料表
| 客戶識別碼 | 公司 | 連絡人 | 
| 1 | Contoso, Ltd. 圖形 | 喬納森·哈斯 | 
| 2 | Tailspin Toys | 艾倫·亞當斯 | 
| 3 | Fabrikam | 卡羅爾·飛利浦 | 
| 4 | Wingtip Toys | 盧西奧·伊亞洛 | 
| 5 | A. 基準 | 曼達爾·薩曼特 | 
| 6 | 冒險工廠 | 布萊恩·伯克 | 
| 7 | 設計院 | 賈卡石碑 | 
| 8 | 美術學院 | 米萊娜·杜馬諾娃 | 
「事件」表格
| 事件識別碼 | 事件 類型 | 客戶 | 活動 日期 | 價格 | 
| 1 | 產品發布 | Contoso, Ltd. | 4/14/2011 | $10,000 | 
| 2 | 公司職能 | Tailspin Toys | 4/21/2011 | $8,000 | 
| 3 | 貿易展覽 | Tailspin Toys | 2011/5/1 | 25,000 美元 | 
| 4 | 陳 | Graphic Design Institute | 5/13/2011 | $4,500 | 
| 5 | 貿易展覽 | Contoso, Ltd. | 5/14/2011 | 55,000 美元 | 
| 6 | 音樂會 | 美術學院 | 5/23/2011 | $12,000 | 
| 7 | 產品發布 | A. 基準 | 6/1/2011 | $15,000 | 
| 8 | 產品發布 | Wingtip Toys | 6/18/2011 | $21,000 | 
| 9 | 籌款活動 | 冒險工廠 | 6/22/2011 | 1,300 美元 | 
| 10 | 演講 | Graphic Design Institute | 6/25/2011 | 2,450 美元 | 
| 11 | 演講 | Contoso, Ltd. | 2011/7/4 | 3,800元 | 
| 12 | 街頭集市 | Graphic Design Institute | 2011/7/4 | $5,500 | 
附註: 本節中的步驟假設「客戶」和「事件類型」資料表位於與「事件」資料表一對多關係的「一」端。 在此情況下,「事件」表格會共用「CustomerID」和「類型ID」欄位。 如果沒有這些關聯性,下一節所述的總計查詢將無法運作。
將範例資料貼到 Excel 工作表中
- 
                  啟動 Excel。 空白活頁簿隨即開啟。 
- 
                  按 SHIFT+F11 插入工作表 (您將需要四個) 。 
- 
                  將每個範例表格中的資料複製到空白工作表中。 將欄標題包含在第一列) (。 
從工作表建立資料庫資料表
- 
                  從第一個工作表中選取資料,包括欄標題。 
- 
                  以滑鼠右鍵按一下 [導覽窗格],然後按一下 [ 貼上]。 
- 
                  按一下 [是 ] 以確認第一列包含直欄標題。 
- 
                  對每個剩餘的工作表重複步驟 1-3。 
尋找最近或最不近的日期
本節中的步驟會使用範例資料來說明建立最高值查詢的程式。
建立基本最上層值查詢
- 
                  在 [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]。 
- 
                  按兩下 [員工] 資料表,然後按一下 [關閉]。 如果您使用範例資料,請將 Employees 資料表新增至查詢。 
- 
                  將您要在查詢中使用的欄位新增至設計方格。 您可以按兩下每個欄位,或將每個欄位拖放到 「欄位」 列的空白儲存格上。 如果您使用範例表格,請新增 [名字]、[姓氏] 和 [出生日期] 欄位。 
- 
                  在包含「出生日期」欄位 (最高值或底部值的欄位中,如果您使用範例表格) ,請按一下「排序」列,然後選取「遞增」或「遞減」。 遞減排序順序會傳回最新的日期,而遞增排序順序會傳回最早的日期。 重要: 您必須在 排序 列中僅針對包含日期的欄位設定值。 如果您為另一個欄位指定排序順序,則查詢不會傳回您想要的結果。 
- 
                  在 [設計] 索引標籤的 [工具] 群組中,按一下 [最上位值] 清單) [全部 (] 旁的向下箭號,然後輸入您要查看的記錄數目,或從清單中選取選項。 
- 
                  按一下 [執行 - 
                  將查詢儲存為 NextBirthDays。 
可以看到,這類頂級價值查詢可以回答基本問題,例如誰是公司中最年長或最年輕的人。 接下來的步驟說明如何使用運算式和其他準則來為查詢增加功能和彈性。 下一個步驟中顯示的條件會傳回接下來的三個員工生日。
將準則新增至查詢
這些步驟會使用上述程序中建立的查詢。 您可以遵循不同的最上層值查詢,只要它包含實際的日期/時間資料,而不是文字值。
提示: 如果您想進一步瞭解此查詢的運作方式,請在每個步驟中在設計檢視和資料工作表檢視之間切換。 如果您想要查看實際的查詢程式碼,請切換到 SQL 檢視。 若要在檢視之間切換,請以滑鼠右鍵按一下查詢頂端的索引標籤,然後按一下您想要的檢視。
- 
                  在 [導覽窗格] 中,以滑鼠右鍵按一下 NextBirthDays 查詢,然後按一下 [ 設計檢視]。 
- 
                  在查詢設計方格中,在 BirthDate 右側的資料行中,輸入下列內容:MonthBorn: DatePart (“m”,[BirthDate]) 。此運算式會使用 DatePart 函式從 BirthDate 擷取月份。 
- 
                  在查詢設計方格的下一欄中,輸入下列內容:DayOfMonthBorn: DatePart (“d”,[BirthDate]) 此運算式會使用 DatePart 函式從 BirthDate 擷取月份的日期。 
- 
                  清除您剛才輸入的兩個運算式的 [ 顯示 ] 列中的核取方塊。 
- 
                  按一下每個運算式的 [排序] 列,然後選取 [遞 增]。 
- 
                  在 [出生日期] 資料行的 [條件] 資料列中,輸入下列運算式:Month ([Birth Date]) > Month (Date () ) OR Month ([Birth Date]) = Month (Date () ) AND Day ([Birth Date]) >Day (Date () ) 此運算式會執行下列動作: - 
                      (月 [ 出生日期]) > 月 (日期 () ) 指定每個員工的出生日期在未來一個月。 
- 
                      [出生日期] (月份 ) = 月份 (日期 () ) 和日期 ([出生日期]) >日期 (日期 () ) 指定如果出生日期發生在當月,則生日在當天或之後。 簡而言之,此運算式排除生日發生在 1 月 1 日至目前日期之間的任何記錄。 提示: 如需查詢準則運算式的更多範例,請參閱查詢 準則範例一文。 
 
- 
                      
- 
                  在 [設計] 索引標籤的 [查詢設定] 群組中,在 [傳回] 方塊中輸入 3。 
- 
                  在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行] 
附註: 在使用您自己的資料進行自己的查詢中,您有時可能會看到比您指定的更多的記錄。 如果您的資料包含多個記錄,這些記錄共用一個值屬於最上層值,則您的查詢將傳回所有這類記錄,即使這表示傳回比您想要的更多的記錄也一樣。
尋找記錄群組的最新或最短日期
您可以使用總計查詢來尋找屬於群組的記錄的最早或最晚日期,例如依城市分組的事件。 總計查詢是一種選取查詢,它使用彙總函數 ((例如「分組依據」、「Min」、「最大值」、「計數」、「第一個」和「上一個) 」來計算每個輸出欄位的值。
包括您要用於類別的欄位 (分組依據),以及具有您要彙總的值的欄位。 如果您包含其他輸出欄位 (例如,當您依事件類型分組時的客戶名稱),查詢也會使用這些欄位來建立群組,並變更結果,使其不會回答您的原始問題。 若要使用其他欄位來標記資料列,您可以建立使用總計查詢作為來源的其他查詢,並將其他欄位新增至該查詢。
提示: 逐步建立查詢是回答更進階問題的非常有效的策略。 如果您在讓複雜的查詢運作時遇到問題,請考慮是否可以將其分解為一系列更簡單的查詢。
建立總計查詢
此程序會使用 Events 範例資料表 和 EventType 範例資料表 來回答此問題:
每種活動類型(不包括音樂會)的最近一次活動是什麼時候?
- 
                  在 [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]。 
- 
                  按兩下 [事件] 和 [事件類型] 資料表。 每個資料表都會顯示在查詢設計工具的頂端區段中。 
- 
                  按兩下 EventType 資料表的 EventType 欄位,以及 Events 資料表的 EventDate 欄位,將欄位新增至查詢設計方格。 
- 
                  在查詢設計方格中,在 [EventType] 欄位的 [準則] 資料列中,輸入 <>Concert。 提示: 如需條件運算式的更多範例,請參閱查詢 準則範例一文。 
- 
                  在 [設計] 索引標籤上,按一下 [顯示/隱藏] 群組中的 [合計]。 
- 
                  在查詢設計方格中,按一下 EventDate 欄位的 [總計] 資料列,然後按一下 [最大]。 
- 
                  在 [設計] 索引標籤的 [結果] 群組中,按一下 [檢視],然後按一下 [SQL 檢視]。 
- 
                  在 SQL 視窗中,在 SELECT 子句結尾,在 AS 關鍵字之後,將 MaxOfEventDate 取代為 MostRecent。 
- 
                  將查詢儲存為 MostRecentEventByType。 
建立第二個查詢以新增更多資料
此程序會使用上述程序中的 MostRecentEventByType 查詢來回答此問題:
每個事件類型最近一次事件的客戶是誰?
- 
                  在 [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]。 
- 
                  在 [查詢] 索引標籤上,按兩下 [MostRecentEventByType] 查詢。 
- 
                  在 [資料表 ] 索引標籤上,按兩下 [事件] 資料表和 [客戶] 資料表。 
- 
                  在查詢設計工具中,按兩下下列欄位: - 
                      在 [事件] 表格上,按兩下 [事件類型]。 
- 
                      在 [MostRecentEventByType] 查詢上,按兩下 [最近]。 
- 
                      在 [客戶] 資料表上,按兩下 [公司]。 
 
- 
                      
- 
                  在查詢設計方格中,在 EventType 資料行的 [排序] 資料列中,選取 [遞增]。 
- 
                  在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。 
 
                         
				 
				