本文介绍如何使用热门值查询和总计查询来查找一组记录中的最近或最早日期。 这可以帮助你回答各种业务问题,例如客户上次下单时间,或者按市/县来说,哪五个季度最适合销售。
本文内容
概述
可以使用最高值查询对数据进行排名并查看排名最高的项。 顶级值查询是一个选择查询,它从结果顶部返回指定数量或百分比的值,例如,网站上五个最受欢迎的页面。 可以针对任何类型的值使用顶级值查询 – 它们不一定就是数字。
如果要在数据排名之前对数据进行分组或汇总,则不必使用顶级值查询。 例如,假设你需要查找贵公司运营的每个城市的给定日期的销售数字。 在这种情况下,城市将成为 (查找每个城市的数据) ,因此请使用总计查询。
使用顶级值查询查找表或记录组中包含最新或最早日期的记录时,可以回答各种业务问题,例如:
-
哪些人最近销售最多?
-
客户上次下单是何时?
-
团队中接下来的三个生日是何时?
若要进行最高值查询,请首先创建选择查询。 然后,根据问题对数据进行排序 – 无论查找的是顶部还是底部。 如果需要对数据进行分组或汇总,将选择查询转换为汇总查询。 然后,可以使用聚合函数(如Max或Min)返回最大值或最小值,或者使用First 或Last返回最早或最新日期。
本文假定使用的日期值具有日期/时间数据类型。 如果日期值在"文本"字段中,则 .
考虑使用筛选器而不是热门值查询
如果考虑特定日期,通常最好使用筛选器。 若要确定是应创建热门值查询还是应用筛选器,请考虑以下事项:
-
如果要返回日期匹配、日期晚于或晚于特定日期的所有记录,请使用筛选器。 例如,若要查看 4 月和 7 月之间的销售日期,请应用筛选器。
-
如果要返回字段中具有最新日期或最新日期的指定数量的记录,并且不知道确切的日期值,或者它们无关紧要,请创建一个顶级值查询。 例如,若要查看五个最佳销售季度,请使用顶级值查询。
有关创建和使用筛选器的信息,请参阅"应用筛选器"一文, 以查看 Access 数据库中的选择记录。
准备要遵循的示例数据以及示例
本文中的步骤使用以下示例表中的数据。
"员工"表
LastName |
名字 |
地址 |
城市 |
CountryOrR egion |
出生日期 |
聘用 日期 |
刘鹏 |
Josh |
1 Main St. |
New York |
USA |
05-Feb-1968 |
10-Jun-1994 |
Heloo |
Waleed |
52 1st St. |
Boston |
USA |
1957 年 5 月 22 日 |
1996 年 11 月 22 日 |
潘杰 |
Guido |
3122 75th Ave. S.W. |
Seattle |
USA |
11-Nov-1960 |
2000 年 3 月 11 日 |
Bagel |
IpipIppe |
1 Contoso Blvd. |
London |
英国 |
1964 年 3 月 22 日 |
22-Jun-1998 |
价格 |
Julian |
Calle Smith 2 |
墨西哥城 |
墨西哥 |
05-Jun-1972 |
2002 年 1 月 5 日 |
四分 |
Christine |
3122 75th St. S. |
Seattle |
USA |
1970 年 1 月 23 日 |
1999 年 4 月 23 日 |
Riley |
Steve |
67 Big St. |
Tampa |
USA |
14-Apr-1964 |
2004 年 10 月 14 日 |
Birkby |
Dana |
2 不毛 Pkwy |
珠海 |
USA |
1959 年 10 月 29 日 |
1997 年 3 月 29 日 |
EventType 表
TypeID |
事件 类型 |
1 |
产品发布 |
2 |
企业函数 |
3 |
Private 函数 |
4 |
基金基金 |
5 |
展商展 |
6 |
演讲 |
7 |
Concert |
8 |
附件 |
9 |
Street Fair |
“客户”表
客户 ID |
公司 |
联系人 |
1 |
康拓工程有限公司 图形 |
Jonathan Haas |
2 |
Tailspin Toys |
Ellen Adams |
3 |
Fabrikam |
Carol Philips |
4 |
Wingtip Toys |
Lucio Iallo |
5 |
A. Datum |
Mandar Samant |
6 |
嘉元实业 |
Brian Burke |
7 |
设计协会 |
Jaka Stele |
8 |
艺术学校 |
Milena Duomanova |
"事件"表
事件 ID |
事件 类型 |
客户 |
事件 日期 |
价格 |
1 |
产品发布 |
康拓工程有限公司 |
4/14/2011 |
$10,000 |
2 |
企业函数 |
Tailspin Toys |
4/21/2011 |
¥80,000 |
3 |
展商展 |
Tailspin Toys |
2011-5-1 |
$25,000 |
4 |
附件 |
Graphic Design Institute |
5/13/2011 |
¥45,000 |
5 |
展商展 |
康拓工程有限公司 |
5/14/2011 |
$55,000 |
6 |
Concert |
艺术学校 |
5/23/2011 |
¥120,000 |
7 |
产品发布 |
A. Datum |
6/1/2011 |
¥150,000 |
8 |
产品发布 |
Wingtip Toys |
6/18/2011 |
¥210,000 |
9 |
基金基金 |
嘉元实业 |
6/22/2011 |
$1,300 |
10 |
演讲 |
Graphic Design Institute |
6/25/2011 |
$2,450 |
11 |
演讲 |
康拓工程有限公司 |
2011-7-4 |
$3,800 |
1.2 |
Street Fair |
Graphic Design Institute |
2011-7-4 |
¥55,000 |
注意: 本部分中的步骤假定"客户"表和"事件类型"表位于与事件表的一对多关系的"一"端。 在这种情况下,Events 表共享 CustomerID 和 TypeID 字段。 没有这些关系,下一部分所述的总计查询将不起作用。
将示例数据粘贴到 Excel 工作表中
-
启动 Excel。 将打开一个空工作簿。
-
按 Shift+F11 插入工作表 (需要四) 。
-
将数据从每个示例表复制到空工作表中。 将列标题 (第一行) 。
基于工作表创建数据库表
-
选择第一个工作表中的数据,包括列标题。
-
右键单击导航窗格,然后单击"粘贴"。
-
单击 " 是"以确认第一行包含列标题。
-
对每个剩余的工作表重复步骤 1-3。
查找最近或最近的日期
本部分中的步骤使用示例数据来说明创建最高值查询的过程。
创建基本热门值查询
-
在“创建”选项卡上的“查询”组中,单击“查询设计”。
-
双击"员工"表,然后单击"关闭"。
如果使用示例数据,则向查询添加"员工"表。
-
将查询中要使用的字段添加到设计网格。 可以双击每个字段,或者将每个字段拖放到"字段"行的 空白单元格上 。
如果使用示例表,请添加"名字"、姓氏和"出生日期"字段。
-
在"出生日期"字段中 (或底值,如果使用示例表) ,请单击"排序"行并选择"升序"或"降序"。
降序返回最近日期,升序返回最早日期。
重要: 必须仅在"排序" 行中为 包含日期的字段设置值。 如果为另一个字段指定排序顺序,查询不会返回想要的结果。
-
在"设计"选项卡上的"工具"组中,单击"所有值 ("列表) 旁边的向下箭头,然后输入要查看的记录数,或者从列表中选择一个选项。
-
单击 运行查询,在数据表视图中显示结果。
-
将查询另存为 NextBirthDays。
可以看到,这种类型的顶级值查询可以回答基本问题,例如,谁是公司中最年长或最陈旧的人。 接下来的步骤介绍如何使用表达式和其他条件为查询增加功能和灵活性。 下一步中显示的条件返回接下来的三个员工生日。
向查询添加条件
这些步骤使用在上一过程中创建的查询。 可以连同其他热门值查询一起跟踪,只要它包含实际日期/时间数据,而不是文本值。
提示: 若要更好地了解此查询的工作原理,请在每个步骤中在设计视图和数据表视图之间切换。 若要查看实际查询代码,请切换到SQL视图。 若要在视图之间切换,请右键单击查询顶部的选项卡,然后单击想要查看的视图。
-
在导航窗格中,右键单击 NextBirthDays 查询,然后单击"设计视图"。
-
在查询设计网格中 BirthDate 右边的列中,输入以下内容
:Month使用:DatePart ("m",[BirthDate]) 。
此表达式使用 DatePart 函数从 BirthDate 提取月份。 -
在查询设计网格的下一列中,输入以下内容
:DayOfMonth在 DatePart ("d",[BirthDate]) 此表达式使用
DatePart函数从 BirthDate 提取月份中的日期。 -
清除刚刚输入的两个表达式的"显示"行中的复选框。
-
单击每个表达式的"排序"行,然后选择"升序"。
-
在"出生日期"列的"条件"行中,键入以下表达式
:Month ([Birth Date]) > Month (Date () ) or Month ([Birth Date]) = Month (Date () ) and Day ([Birth Date]) >Day (Date () ) 此表达式
执行以下操作:-
月份 ([出生日期]) >月份 (日期 () ) 指定每个员工的出生日期属于将来的月份。
-
Month ([Birth Date]) = Month (Date () ) And Day ([Birth Date]) >Day (Date () ) 指定如果出生日期发生在当前月份,则生日在当天的当天或之后。
简而言之,此表达式将排除 1 月 1 日与当前日期之间发生生日的任何记录。
提示: 有关查询条件表达式的更多示例,请参阅"查询 条件示例"一文。
-
-
在"设计"选项卡上的"查询设置"组中,在"返回"框中键入3。
-
在“设计”选项卡上的“结果”组中,单击“运行”。
注意: 在你自己的使用自己的数据的查询中,有时可能看到的记录数超过指定的记录数。 如果数据包含多个记录,这些记录共享的值位于最高值之一,则查询将返回所有此类记录,即使这意味着返回的记录数超过您需要的记录数。
查找记录组的最近日期或最近日期
使用总计查询查找分组的记录的最早或最新日期,例如按城市分组的事件。 汇总查询是一个选择查询,它使用聚合函数 ((如 Group By、M、Max、Count、First和Last) )计算每个输出字段的值。
包括要用于类别(按分组)的字段和包含要汇总的值的字段。 如果包含其他输出字段(例如,按事件类型分组时的客户姓名),查询还将使用这些字段创建组,更改结果,使其不回答原始问题。 若要使用其他字段标记行,请创建一个使用总计查询作为源的附加查询,然后向该查询添加其他字段。
提示: 分步构建查询是一种非常有效的策略,用于回答更高级的问题。 如果在运行复杂查询时遇到问题,请考虑是否可以将复杂查询分解为一系列更简单的查询。
创建总计查询
此过程使用 Events 示例表 和 EventType 示例表 来回答此问题:
每个事件类型(不包括支持者)的最近事件是什么时间?
-
在“创建”选项卡上的“查询”组中,单击“查询设计”。
-
双击"事件"和"EventType"表。
每个表都显示在查询设计器的顶部部分。 -
双击 EventType 表的 EventType 字段和 Events 表中的 EventDate 字段,将字段添加到查询设计网格。
-
在查询设计网格中,在EventType字段的"条件"行中,<>Concert。
提示: 有关条件表达式的更多示例,请参阅"查询 条件示例"一文。
-
在“设计”选项卡上的“显示/隐藏”组中,单击“总计”。
-
在查询设计网格中,单击EventDate 字段的"总计"行,然后单击"最大值"。
-
在“设计”选项卡上的“结果”组中,单击“视图”,然后单击“SQL 视图”。
-
在 SQL 窗口中,SELECT 子句末尾的 AS 关键字正之后,将MaxOfEventDate替换为MostRecent。
-
将查询另存为 MostRecentEventByType。
创建第二个查询以添加更多数据
此过程使用前面过程中的 MostRecentEventByType 查询来回答此问题:
每个事件类型的最新事件的客户是谁?
-
在“创建”选项卡上的“查询”组中,单击“查询设计”。
-
在" 查询" 选项卡上,双击 MostRecentEventByType 查询。
-
在 "表" 选项卡上,双击"事件"表和"客户"表。
-
在查询设计器中,双击以下字段:
-
在 Events 表中,双击 EventType。
-
在 MostRecentEventByType 查询中,双击 MostRecent。
-
在"客户"表中,双击"公司"。
-
-
在查询设计网格中,在EventType列的"排序"行中,选择"升序"。
-
在“设计”选项卡上的“结果”组中,单击“运行”。