尋找日期最長或最近期的紀錄

套用到
Access 2010

本文說明如何使用頂值查詢與總值查詢,找出一組紀錄中最近或最早的日期。 這能幫助你回答各種商業問題,例如顧客上次下訂單的時間,或是各城市哪五個季度銷售表現最佳。

本文內容

概觀

你可以使用最高價值查詢來排名資料並檢視排名最高的項目。 頂值查詢是一種選擇查詢,從結果頂端返回指定數量或百分比的值,例如網站中最受歡迎的五個頁面。 你可以用頂值查詢來對任何類型的數值——不一定要是數字。

如果你想在排名前先將資料分組或摘要,就不必使用頂值查詢。 舉例來說,假設你需要查找公司所在城市某一天的銷售數字。 在這種情況下,城市會變成分類, (你需要找到每個城市) 的資料,所以你會用總數查詢。

當你使用頂值查詢尋找包含表格或紀錄組中最新或最早日期的紀錄時,你可以回答各種商業問題,例如以下幾點:

  • 最近誰的銷售業績最高?
  • 顧客上次下訂單是什麼時候?
  • 接下來三個生日是什麼時候?

要做出一個最高價值查詢,首先建立一個選擇查詢。 接著,根據你的問題排序資料——你是在尋找頂端還是底端。 如果你需要將資料分組或摘要,請將 select 查詢轉換成 totals 查詢。 接著你可以使用彙總函數,例如 最大 值或 最小 值來回傳最高或最低值,或用 第一最後來 回傳最早或最晚的日期。

本文假設你使用的日期值是日期/時間資料型態。 如果你的日期值在文字欄位,則 。

考慮用過濾器代替頂值查詢

如果你有明確的日期,通常會比較好。 要判斷是否應該建立頂值查詢或套用篩選器,請考慮以下幾點:

  • 如果你想回傳所有日期相符、早於或晚於特定日期的紀錄,請使用篩選器。 例如,要查看四月至七月之間的銷售日期,你需要套用篩選器。
  • 如果你想回傳指定數量的記錄,且欄位中日期是最近或最新的,且你不知道確切的日期值,或它們不重要,你就建立一個頂值查詢。 例如,要查看五個最佳銷售季度,可以使用頂點價值查詢。

欲了解更多關於建立及使用篩選器的資訊,請參閱文章 《套用篩選器以檢視 Access 資料庫中的部分紀錄》。

頁面頂端

準備範例資料以配合範例

本文的步驟使用以下範例表格中的數據。

員工表

姓氏 名字 地址 城市 CountryOrR 官方 出生日期 聘用日期
沙東 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 表格

TypeID 事件類型
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 3800美元
12 街頭嘉年華 Graphic Design Institute 2011/7/4 $5,500

注意

本節步驟假設客戶資料表與事件類型資料表位於事件資料表一對多關係的「一」側。 在這種情況下,事件資料表會共用 CustomerID 和 TypeID 欄位。 接下來章節描述的總數查詢若沒有這些關聯,將無法運作。

將範例資料貼到 Excel 工作表中

  1. 啟動 Excel。 一本空白的練習簿打開。
  2. 按下 SHIFT + F11 插入工作紙 (你需要四個) 。
  3. 將每個樣本表的資料複製到空白工作表中。 請在第一列) (包含欄位標題。

從工作表建立資料庫資料表

  1. 從第一份工作紙中選取資料,包括欄位標題。
  2. 右鍵點擊導覽窗格,然後點 選貼上
  3. 點擊 「是 」以確認第一列是否包含欄位標題。
  4. 對剩餘的每張工作紙重複步驟1到3。

查找最晚或最近的日期

本節步驟使用範例資料來說明建立頂值查詢的過程。

建立一個基本的頂值查詢

  1. 在 [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]

  2. 雙擊員工資料表,然後點擊 關閉
    如果你使用範例資料,請將 Employees 資料表加入查詢中。

  3. 將你想在查詢中使用的欄位加入設計網格。 你可以雙擊每個欄位,或將欄位拖放到欄位列的空白格子上。
    如果你使用範例表,請新增名字、姓氏和出生日期欄位。

  4. 在包含你最上面或最下面值 (出生日期欄位裡,如果你使用範例表) ,請點選 排序 列,選擇 升序序。
    降序回傳最近日期,遞減排序回傳最早日期。

    重要

    你必須在 排序 列中只設定包含日期欄位的值。 如果你為其他欄位指定排序順序,查詢不會回傳你想要的結果。

  5. 設計 標籤的 工具群組中 ,點擊「 全部 」 (「 Top Values 」清單) 旁的向下箭頭,然後輸入你想看到的紀錄數量,或從列表中選擇選項。

  6. 點擊 執行按鈕圖片 以執行查詢並在資料表檢視中顯示結果。

  7. 將查詢存為 NextBirthDays。

你可以看到這類頂尖價值問題可以回答基本問題,例如誰是公司中年紀最大或最年輕的人。 接下來的步驟將說明如何運用表達式及其他標準,為查詢增添力量與彈性。 下一步顯示的標準會回傳接下來三個員工的生日。

在查詢中加入條件

這些步驟使用前一個程序中建立的查詢。 只要查詢包含實際的日期/時間資料,而非文字值,你可以繼續用不同的頂值查詢。

秘訣

如果你想更了解這個查詢的運作方式,可以在每個步驟切換設計檢視和資料表檢視。 如果你想看實際的查詢程式碼,請切換到 SQL 檢視。 要切換檢視,請右鍵點擊查詢頂端的分頁,然後點擊你想要的檢視。

  1. 在導航窗格中,右鍵點擊 NextBirthDays 查詢,然後點選 設計檢視

  2. 在查詢設計網格中,BirthDate 右側欄位輸入以下內容:
    出生月份:日期 (“m”,[出生日期])
    此表達式透過 DatePart 函式從 BirthDate 中提取月份。

  3. 在查詢設計網格的下一欄,輸入以下內容:
    出生日期:日期 (“d”,[出生日期])
    此表達式透過 DatePart 函式從 BirthDate 中提取月份的日期。

  4. 剛輸入的兩個表達式中,請清除顯示列中的勾選框。

  5. 點選每個表達式的 排序 列,然後選擇「 升遷」。

  6. 出生日期欄的標準列,輸入以下表達式:
    月 ([出生日期]) > 月 (日期 () ) 或月 ([出生日期]) = 月 (日期 () ) 與日 ([出生日期]) >日 (日期 () )
    此表達式的運作方式如下:

    • ( 月[出生日期]) > () ) 月 (日期 指定每位員工的出生日期落在未來的某個月份。

    • 月份 ([出生日期]) = 月 (日期 () ) 日與日期 ([出生日期]) (>日期 () ) 指定若出生日期位於當月,則生日落在當天或之後。
      簡言之,此表述排除了生日發生在1月1日至當前日期之間的任何紀錄。

      秘訣

      欲了解更多查詢準則表達式的範例,請參閱文章 《查詢準則範例》。

  7. 設計 標籤的 查詢設定 群組中,輸入 3 個回 框。

  8. 設計 標籤的 結果 群組中,點擊 「執行按鈕」圖片

注意

在你自己的查詢和資料中,有時可能會看到比你指定的更多的紀錄。 如果你的資料包含多個紀錄,且這些紀錄共享一個屬於頂尖值的值,你的查詢會回傳所有這類紀錄,即使這會回傳比你想要的更多的紀錄。

頁面頂端

查找紀錄群組的最晚或最近日期

你會使用總數查詢來尋找屬於群組的紀錄的最早或最新日期,例如依城市分組的事件。 總計查詢是一種選擇查詢,使用彙總函數 (如 群組最小值、 最大值、 計數第一) 和最後 來計算每個輸出欄位的值。

請包含你想用來分類的欄位——用來分組——以及你想彙總的值欄位。 如果你包含其他輸出欄位——例如依事件類型分組時的客戶名稱——查詢也會使用這些欄位來分組,結果會改變,避免回答你原本的問題。 要用其他欄位標記資料列,你要建立一個以 totals 查詢為來源的額外查詢,然後將額外的欄位加入該查詢。

秘訣

分階段建立查詢是回答進階問題的非常有效策略。 如果你在處理複雜查詢時遇到困難,可以考慮是否可以將其拆解成一系列較簡單的查詢。

建立總數查詢

此程序使用 Events 範例表EventType 範例表 來回答此問題:

不包括演唱會,每個類型活動最近的活動是什麼時候?

  1. 在 [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]

  2. 雙擊事件表和事件類型表。
    每個資料表都會出現在查詢設計器的頂端區塊。

  3. 雙擊 EventType 表格的 EventType 欄位,以及 Events 表格的 EventDate 欄位,將欄位加入查詢設計網格。

  4. 在查詢設計網格中,EventType 欄位的 Criteria 列輸入 <>Concert

    秘訣

    欲了解更多條件表達式範例,請參閱文章 《查詢標準範例》。

  5. [設計] 索引標籤上,按一下 [顯示/隱藏] 群組中的 [合計]

  6. 在查詢設計網格中,點選 EventDate 欄位的 Total 列,然後點 選 Max

  7. 在設計標籤的 結果 群組中,點選 「檢視」,然後點選 「SQL 檢視」。

  8. 在 SQL 視窗中,SELECT 子句結束後,緊接 AS 關鍵字後,將 MaxOfEventDate 替換為 MostRecent

  9. 將查詢儲存為 MostRecentEventByType。

建立第二個查詢以增加更多資料

此程序使用前一個程序中的 MostRecentEventByType 查詢來回答此問題:

最近一次活動的客戶是誰?

  1. 在 [建立] 索引標籤的 [查詢] 群組中,按一下 [查詢設計]

  2. 查詢 標籤中,雙擊 MostRecentEventByType 查詢。

  3. 「表格」 標籤中,雙擊事件表格和客戶表格。

  4. 在查詢設計器中,雙擊以下欄位:

    1. 在活動表中,雙擊 EventType。
    2. 在 MostRecentEventByType 查詢中,雙擊 MostRenewd。
    3. 在客戶表格中,雙擊「公司」。
  5. 在查詢設計網格中,EventType 欄位的排序列中選擇「升天」。

  6. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]

頁面頂端