이 문서에서는 상위 값 쿼리 및 합계 쿼리를 사용하여 레코드 집합에서 가장 최근 또는 초기 날짜를 찾는 방법을 설명합니다. 이렇게 하면 고객이 마지막으로 주문을 한 경우 또는 도시별 매출에 가장 적합한 5분기와 같은 다양한 비즈니스 질문에 답변하는 데 도움이 될 수 있습니다.
이 문서의 내용
개요
상위 값 쿼리를 사용하여 데이터의 순위를 지정하고 가장 높은 순위의 항목을 검토할 수 있습니다. 최상위 값 쿼리는 결과의 맨 위에서 지정된 수 또는 값의 백분율(예: 웹 사이트에서 가장 인기 있는 5개 페이지)을 반환하는 선택 쿼리입니다. 모든 종류의 값에 대해 최상위 값 쿼리를 사용할 수 있습니다. 숫자일 필요는 없습니다.
순위를 매기기 전에 데이터를 그룹화하거나 요약하려는 경우 상위 값 쿼리를 사용할 필요가 없습니다. 예를 들어 회사가 운영되는 각 도시에 대해 지정된 날짜의 판매 번호를 찾아야 한다고 가정합니다. 이 경우 도시는 범주가 되므로(도시당 데이터를 찾아야 합니다) 합계 쿼리를 사용합니다.
상위 값 쿼리를 사용하여 테이블 또는 레코드 그룹에서 최신 또는 초기 날짜가 포함된 레코드를 찾는 경우 다음과 같은 다양한 비즈니스 질문에 답변할 수 있습니다.
-
누가 최근 가장 많은 매출을 내고 있습니까?
-
고객이 마지막으로 주문한 시기는 언제인가요?
-
팀의 다음 세 생일은 언제인가요?
최상위 값 쿼리를 만들려면 먼저 선택 쿼리를 만듭니다. 그런 다음, 위쪽 또는 아래쪽을 찾고 있는지 여부에 관계없이 질문에 따라 데이터를 정렬합니다. 데이터를 그룹화하거나 요약해야 하는 경우 선택 쿼리를 합계 쿼리로 전환합니다. 그런 다음 Max 또는 Min 과 같은 집계 함수를 사용하여 가장 높거나 가장 낮은 값을 반환하거나 첫 번째 또는 마지막 을 사용하여 가장 이른 날짜 또는 최신 날짜를 반환할 수 있습니다.
이 문서에서는 사용하는 날짜 값에 날짜/시간 데이터 형식이 있다고 가정합니다. 날짜 값이 텍스트 필드에 있으면 입니다.
상위 값 쿼리 대신 필터를 사용하는 것이 좋습니다.
필터는 일반적으로 특정 날짜를 염두에 두고 있는 경우 더 좋습니다. 상위 값 쿼리를 만들거나 필터를 적용해야 하는지 여부를 확인하려면 다음을 고려합니다.
-
날짜가 일치하는 모든 레코드를 반환하려는 경우 는 특정 날짜 이전 또는 이후인 경우 필터를 사용합니다. 예를 들어 4월과 7월 사이의 판매 날짜를 보려면 필터를 적용합니다.
-
필드에 가장 최근 또는 최신 날짜가 있는 지정된 양의 레코드를 반환하고 정확한 날짜 값을 모르거나 중요하지 않은 경우 최상위 값 쿼리를 만듭니다. 예를 들어 5개의 최고의 판매 분기를 보려면 상위 값 쿼리를 사용합니다.
필터를 만들고 사용하는 방법에 대한 자세한 내용은 Access 데이터베이스에서 선택 레코드를 보려면 필터 적용 문서를 참조하세요.
예제와 함께 따라야 할 샘플 데이터 준비
이 문서의 단계에서는 다음 샘플 테이블의 데이터를 사용합니다.
Employees 테이블
|
LastName |
이름 |
주소 |
구/군/시 |
CountryOrR egion |
생년월 일 |
고용 날짜 |
|
강 |
병재 |
송파구 잠실동 220 |
서울특별시 |
USA |
1968년 2월 5일 |
1994년 6월 10일 |
|
Heloo |
웨일즈 () |
구산동 17-111 |
김해시 |
USA |
1957년 5월 22일 |
1996년 11월 22일 |
|
황태준 |
Guido (귀도) |
3122 75th Ave. S.W. |
과천시 |
USA |
1960년 11월 11일 |
2000년 3월 11일 |
|
베이글 |
장 필립 |
무릉동 171-3 |
공주시 |
UK |
1964년 3월 22일 |
1998년 6월 22일 |
|
가격 |
줄리안 |
사하구 신평동 701-29 |
부산광역시 |
멕시코 |
1972년 6월 5일 |
2002년 1월 5일 |
|
휴즈 |
크리스틴 |
3122 75th St. S. |
과천시 |
USA |
1970년 1월 23일 |
1999년 4월 23일 |
|
라일리 |
스티브 |
동구 마산동 250-1 |
대전광역시 |
USA |
1964년 4월 14일 |
2004년 10월 14일 |
|
버크비(Birkby) |
Dana |
2 코가 많은 Pkwy |
인천광역시 |
USA |
1959년 10월 29일 |
1997년 3월 29일 |
EventType 테이블
|
TypeID |
이벤트 유형 |
|
1 |
제품 출시 |
|
2 |
회사 함수 |
|
3 |
Private 함수 |
|
4 |
기금 모금자 |
|
5 |
전시회 |
|
6 |
강의 |
|
7 |
음악회 |
|
8 |
전시 |
|
9 |
거리 박람회 |
고객 테이블
|
고객 ID |
회사 |
연락처 |
|
1 |
극동 무역 그래픽 |
조나단 하스 |
|
2 |
신세계 통상 (주) |
엘렌 애덤스 |
|
3 |
Fabrikam |
캐롤 필립스 |
|
4 |
Wingtip Toys |
Lucio Iallo |
|
5 |
A Datum |
만다르 사만트 |
|
6 |
Adventure Works |
브라이언 버크 |
|
7 |
디자인 인스티튜드 |
Jaka Stele |
|
8 |
School of Fine Art |
밀레나 두오마노바 |
이벤트 테이블
|
이벤트 ID |
이벤트 유형 |
고객 |
이벤트 날짜 |
가격 |
|
1 |
제품 출시 |
극동 무역 |
4/14/2011 |
\10,000,000 |
|
2 |
회사 함수 |
신세계 통상 (주) |
4/21/2011 |
\8,000,000 |
|
3 |
전시회 |
신세계 통상 (주) |
2011-05-01 |
$25,000 |
|
4 |
전시 |
베네디스 유통 ㈜ |
5/13/2011 |
\4,500,000 |
|
5 |
전시회 |
극동 무역 |
5/14/2011 |
$55,000 |
|
6 |
음악회 |
School of Fine Art |
5/23/2011 |
\12,000,000 |
|
7 |
제품 출시 |
A Datum |
2011/6/1 |
\15,000,000 |
|
8 |
제품 출시 |
Wingtip Toys |
6/18/2011 |
\21,000,000 |
|
9 |
기금 모금자 |
Adventure Works |
6/22/2011 |
$1,300 |
|
10 |
강의 |
베네디스 유통 ㈜ |
6/25/2011 |
$2,450 |
|
11 |
강의 |
극동 무역 |
2011-07-04 |
$3,800 |
|
12 |
거리 박람회 |
베네디스 유통 ㈜ |
2011-07-04 |
₩5,500,000 |
참고: 이 섹션의 단계에서는 Customers 및 Event Type 테이블이 이벤트 테이블과의 일대다 관계의 "일" 쪽에 있다고 가정합니다. 이 경우 이벤트 테이블은 CustomerID 및 TypeID 필드를 공유합니다. 다음 섹션에 설명된 총 쿼리는 이러한 관계 없이는 작동하지 않습니다.
샘플 데이터를 Excel 워크시트에 붙여넣기
-
Excel을 시작합니다. 빈 통합 문서가 열립니다.
-
Shift+F11을 눌러 워크시트를 삽입합니다(4개 필요).
-
각 샘플 테이블의 데이터를 빈 워크시트로 복사합니다. 열 머리글(첫 번째 행)을 포함합니다.
워크시트에서 데이터베이스 테이블 만들기
-
열 머리글을 포함하여 첫 번째 워크시트에서 데이터를 선택합니다.
-
탐색 창을 마우스 오른쪽 단추로 클릭한 다음 붙여넣기를 클릭합니다.
-
예를 클릭하여 첫 번째 행에 열 머리글이 포함되어 있음을 확인합니다.
-
나머지 워크시트 각각에 대해 1-3단계를 반복합니다.
가장 최근 또는 가장 최근 날짜 찾기
이 섹션의 단계에서는 샘플 데이터를 사용하여 상위 값 쿼리를 만드는 프로세스를 보여 줍니다.
기본 상위 값 쿼리 만들기
-
만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.
-
Employees 테이블을 두 번 클릭한 다음 닫기를 클릭합니다.
샘플 데이터를 사용하는 경우 쿼리에 Employees 테이블을 추가합니다.
-
쿼리에서 사용할 필드를 디자인 표에 추가합니다. 각 필드를 두 번 클릭하거나 필드 행의 빈 셀에서 각 필드를 끌어서 놓을 수 있습니다.
샘플 테이블을 사용하는 경우 이름, 성 및 생년월일 필드를 추가합니다.
-
위쪽 또는 아래쪽 값이 포함된 필드(생년월일 필드, 샘플 테이블을 사용하는 경우)에서 정렬 행 을 클릭하고 오름차순 또는 내림차순을 선택합니다.
내림차순 정렬 순서는 가장 최근 날짜를 반환하고 오름차순 정렬 순서는 가장 빠른 날짜를 반환합니다.
중요: 날짜가 포함된 필드에 대해서만 정렬 행에 값을 설정해야 합니다. 다른 필드에 정렬 순서를 지정하는 경우 쿼리는 원하는 결과를 반환하지 않습니다.
-
디자인 탭의 도구 그룹에서 모두 옆에 있는 아래쪽 화살표(상위 값 목록)를 클릭하고 보려는 레코드 수를 입력하거나 목록에서 옵션을 선택합니다.
-
실행을 클릭하여 쿼리를 실행하고 결과를 데이터시트 보기에 표시합니다. -
쿼리를 NextBirthDays로 저장합니다.
이러한 유형의 상위 값 쿼리는 회사에서 가장 나이가 있거나 가장 젊은 사람이 누구인지와 같은 기본 질문에 답할 수 있음을 알 수 있습니다. 다음 단계에서는 식 및 기타 조건을 사용하여 쿼리에 성능과 유연성을 추가하는 방법을 설명합니다. 다음 단계에 표시된 기준은 다음 세 명의 직원 생일을 반환합니다.
쿼리에 조건 추가
이러한 단계에서는 이전 절차에서 만든 쿼리를 사용합니다. 텍스트 값이 아닌 실제 날짜/시간 데이터가 포함된 경우 다른 상위 값 쿼리를 따라갈 수 있습니다.
팁: 이 쿼리의 작동 방식을 더 잘 이해하려면 각 단계에서 디자인 보기와 데이터시트 보기 간에 전환합니다. 실제 쿼리 코드를 보려면 SQL 보기로 전환합니다. 보기 간에 전환하려면 쿼리 맨 위에 있는 탭을 마우스 오른쪽 단추로 클릭한 다음 원하는 보기를 클릭합니다.
-
탐색 창에서 NextBirthDays 쿼리를 마우스 오른쪽 단추로 클릭한 다음 디자인 뷰를 클릭합니다.
-
쿼리 디자인 표의 BirthDate 오른쪽 열에 MonthBorn: DatePart("m",[BirthDate])를 입력합니다.이 식은 DatePart 함수를 사용하여 BirthDate에서 월을 추출합니다.
-
쿼리 디자인 표의 다음 열에서 다음을 입력합니다.DayOfMonthBorn: DatePart("d",[BirthDate])이 식은 DatePart 함수를 사용하여 BirthDate에서 월의 날짜를 추출합니다.
-
방금 입력한 두 식 각각에 대한 표시 행의 검사 상자를 지웁니다.
-
각 식에 대한 정렬 행을 클릭한 다음 오름차순을 선택합니다.
-
생년월일 열의 Criteria 행에 month([Birth Date]) > Month(Date()) OR Month([Birth Date])= Month(Date()) AND Day([Birth Date])>Day(Date()))를 입력합니다. 이 식은 다음을 수행합니다.
-
Month( [생년월일]) > Month(Date())) 는 각 직원의 생년월일이 이후 월로 지정됩니다.
-
Month( [Birth Date])= Month(Date()) And Day([Birth Date])>Day(Date()))는 현재 월에서 생년월일이 발생하면 생일이 현재 날짜 또는 그 이후가 되도록 지정합니다.
즉, 이 식은 생일이 1월 1일과 현재 날짜 사이에 발생하는 모든 레코드를 제외합니다.
팁: 쿼리 조건 식의 더 많은 예제는 쿼리 조건 예제 문서를 참조하세요.
-
-
디자인 탭의 쿼리 설정 그룹에서 반환 상자에 3을 입력합니다.
-
디자인 탭의 결과 그룹에서 실행
을 클릭합니다.
참고: 사용자 고유의 데이터를 사용하는 사용자 고유의 쿼리에서 지정한 것보다 더 많은 레코드가 표시될 수 있습니다. 데이터에 상위 값 중 하나인 값을 공유하는 여러 레코드가 포함된 경우 쿼리는 원하는 것보다 더 많은 레코드를 반환하는 것을 의미하더라도 이러한 모든 레코드를 반환합니다.
레코드 그룹에 대한 가장 최근 날짜 또는 최소 날짜 찾기
합계 쿼리를 사용하여 도시별로 그룹화된 이벤트와 같이 그룹에 속하는 레코드에 대한 가장 이른 날짜 또는 최신 날짜를 찾습니다. 합계 쿼리는 집계 함수(예: Group By, Min, Max, Count, First 및 Last) 를 사용하여 각 출력 필드의 값을 계산하는 선택 쿼리입니다.
범주에 사용할 필드(그룹화 기준)와 요약할 값이 있는 필드를 포함합니다. 다른 출력 필드(예: 이벤트 유형별로 그룹화할 때 고객의 이름)를 포함하는 경우 쿼리는 해당 필드를 사용하여 그룹을 만들고 원래 질문에 답변하지 않도록 결과를 변경합니다. 다른 필드를 사용하여 행에 레이블을 지정하려면 합계 쿼리를 원본으로 사용하는 추가 쿼리를 만들고 해당 쿼리에 추가 필드를 추가합니다.
팁: 단계의 쿼리 작성은 고급 질문에 답변하기 위한 매우 효과적인 전략입니다. 복잡한 쿼리가 작동하는 데 문제가 있는 경우 일련의 간단한 쿼리로 세분화할 수 있는지 여부를 고려합니다.
요약 쿼리 만들기
이 절차 에서는 이벤트 샘플 테이블 과 EventType 샘플 테이블을 사용하여 이 질문에 답변합니다.
콘서트를 제외한 각 이벤트 유형의 가장 최근 이벤트는 언제인가요?
-
만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.
-
이벤트 및 EventType 테이블을 두 번 클릭합니다. 각 테이블은 쿼리 디자이너의 위쪽 섹션에 표시됩니다.
-
EventType 테이블의 EventType 필드와 이벤트 테이블에서 EventDate 필드를 두 번 클릭하여 필드를 쿼리 디자인 표에 추가합니다.
-
쿼리 디자인 표의 EventType 필드의 조건 행에 <>Concert를 입력합니다.
팁: 조건 식의 더 많은 예제는 쿼리 조건 예제 문서를 참조하세요.
-
디자인 탭의 표시/숨기기 그룹에서 요약을 클릭합니다.
-
쿼리 디자인 표에서 EventDate 필드의 총 행을 클릭한 다음 최대를 클릭합니다.
-
디자인 탭의 결과 그룹에서 보기를 클릭한 다음 SQL 보기를 클릭합니다.
-
SQL 창의 SELECT 절 끝에 있는 AS 키워드(keyword) 바로 뒤에 있는 MaxOfEventDate를 MostRecent로 바꿉 있습니다.
-
쿼리를 MostRecentEventByType으로 저장합니다.
더 많은 데이터를 추가하는 두 번째 쿼리 만들기
이 절차에서는 이전 절차의 MostRecentEventByType 쿼리를 사용하여 이 질문에 답변합니다.
각 이벤트 유형의 가장 최근 이벤트에서 고객은 누구였나요?
-
만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.
-
쿼리 탭에서 MostRecentEventByType 쿼리를 두 번 클릭합니다.
-
테이블 탭에서 이벤트 테이블과 Customers 테이블을 두 번 클릭합니다.
-
쿼리 디자이너에서 다음 필드를 두 번 클릭합니다.
-
이벤트 테이블에서 EventType을 두 번 클릭합니다.
-
MostRecentEventByType 쿼리에서 MostRecent를 두 번 클릭합니다.
-
Customers 테이블에서 회사를 두 번 클릭합니다.
-
-
쿼리 디자인 표의 EventType 열의 정렬 행에서 오름차순을 선택합니다.
-
디자인 탭의 결과 그룹에서 실행을 클릭합니다.