2017-11-16 1 views
0

MS Access에서 데이터베이스를 예약하는 클래스 작업 중입니다. 다양한 수업이 있습니다. 각 수업은 여러 번, 때로는 여러 번 수업되지만, 반드시 매일은 아닙니다. 각 과정에는 랩톱에 저장된 고유 한 소프트웨어 및 데이터 집합이 있습니다. 해당 소프트웨어가로드 된 각 코스의 랩톱 세트가 있습니다.windowing functions ms 액세스

주어진 교육 일에 대해 강사가 어느 랩톱 컴퓨터를 사용해야하는지 알 수 있도록 해당 컴퓨터 실에서 몇 명을 수용 할 것인가에 따라 다른 방의 적합한 클래스에 랩톱 ID 범위를 할당해야합니다 그 날 수업을 가르치기 위해 그들과 함께 방.

Date Room ClassName  HeadCount 
---- ---- ---------  --------- 
11/30 101 Intro   10 
11/30 102 Intro   15 
11/30 103 Course 2   5 
12/1 101 Intro   10 
12/1 102 Course 2   15 
12/1 103 Course 3   10 

나는 또한이 노트북에 대해 다음 사항을 알고 : 위의 두 테이블을 기반으로

ClassName LaptopID 
--------- --------- 
Intro  LT.Intro_1 
Intro  ... 
Intro  LT.Intro_30 
Course 2 LT.Course 2_1 
Course 2  ... 
Course 2 LT.Course 2_30 
Course 3 LT.Course 3_1 
Course 3 ... 
Course 3 LT.Course 3_30 

, 내가 출력 할 것이다 :

예를 들어, 나는 원시 데이터를

Date Room ClassName  HeadCount First Laptop Last Laptop 
---- ---- ---------  --------- ------------ ----------- 
11/30 101 Intro   10  LT.Intro_1  LT.Intro_10 
11/30 102 Intro   15  LT.Intro_11 LT.Intro_25 
11/30 103 Course 2   5  LT.Course 2_1 LT.Course 2_5 
12/1 101 Intro   10  LT.Intro_1  LT.Intro_10 
12/1 102 Course 2  15  LT.Course 2_1 LT.Course 2_15 
12/1 103 Course 3  10  LT.Course 3_1 LT.Course 3_10 

저는 이것이 윈도우 기능이지만 MS Access에는 리드 또는 지연이 없다는 것을 알고 있습니다. 해결 방법이 있습니까?

+0

다른 데이터베이스로 전환하십시오. 소프트웨어 권장 사항을 작성하지 않아도되지만 SQL Server Express는 동일한 공급 업체에서 제공하고 무료이며 창 기능을 지원합니다. –

+0

LaptopID의 형식이 "### _ TEXT"인 두 번째 테이블에서 '001_LT.Intro', '030_LT'와 같은 다른 열을 만들 수 있습니까?소개 '등? 그렇다면 HeadCount 열을 두 번째 테이블에 추가하면 ClassName 및 HeadCount별로 MAX 및 MIN을이 새 열과 그룹에 사용할 수 있습니다. – Pops

+0

은 실제 테이블 정의 또는 쿼리 결과입니까? 액세스가 가능하지만 성능은 확실하지 않을 수 있습니다. –

답변

1

더 나은 성능을 위해 테이블 ​​정의를 변경하고자 할 수 있습니다. 내가 언급 한 것처럼 두 개의 테이블을 다시 만들었습니다.

랩톱 ID가 순차적이며 클래스 당 인원수를 알고 있습니다. 리드를 따라 가기 위해서는 마지막 인원을 알아야합니다. 같은 날짜에 현재 수업/이벤트 이전에 같은 참석자가 될 것입니다. 이 ID = < currentClassname하는 currentDate = & & 날짜 클래스 명 currentID

X = SUM (인원수). (현재는 currentRow를 의미합니다.)

이제 현재 행 앞에 사용 된 총 랩톱과 현재 행에 대한 headCount를 알 수 있습니다. 첫 번째 랩톱은 Last 랩톱의 경우

f = min(laptopid) where laptopid > x (x being totaLaptopUsedBefore this Row) 

일 수 있으며, 현재 헤드 카운트도 추가해야합니다.

l = min(laptopid) where laptopid >= currentHeadCount + x 

참고 f는 laptopid가 크고 L은>를 확인합니다.

표 : 여기

은 개선 할 수있는 작업 데모입니다

SELECT tbl_classEvents.ID 
    ,tbl_classEvents.DATE 
    ,tbl_classEvents.Room 
    ,tbl_classEvents.ClassName 
    ,tbl_classEvents.HeadCount 
    ,(
     SELECT min(laptopId) 
     FROM tbl_ClassVsLaptop T1 
     WHERE T1.ClassName = tbl_ClassEvents.ClassNAme 
      AND Mid([T1.LaptopID], InStrRev([T1.LaptopID], "_") + 1, 3) > (
       + Nz((
         SELECT sum(headCount) 
         FROM tbl_classEvents T2 
         WHERE T2.ID < Tbl_ClassEvents.ID 
          AND T2.[DATE] = [Tbl_ClassEvents].[DATE] 
          AND T2.[ClassName] = [Tbl_ClassEvents].[ClassName] 
         ), 0) 
       ) 
     ) AS FirstLaptop 
    ,(
     SELECT min(laptopId) 
     FROM tbl_ClassVsLaptop T1 
     WHERE T1.ClassName = tbl_ClassEvents.ClassNAme 
      AND Mid([T1.LaptopID], InStrRev([T1.LaptopID], "_") + 1, 3) >= (
       + [tbl_classEvents].[HeadCount] + Nz((
         SELECT sum(headCount) 
         FROM tbl_classEvents T2 
         WHERE T2.ID < Tbl_ClassEvents.ID 
          AND T2.[DATE] = [Tbl_ClassEvents].[DATE] 
          AND T2.[ClassName] = [Tbl_ClassEvents].[ClassName] 
         ), 0) 
       ) 
     ) AS LastLaptop 
FROM tbl_classEvents 
ORDER BY tbl_classEvents.DATE 
    ,tbl_classEvents.Room 
    ,tbl_classEvents.ClassNAme; 

그리고 출력 :

tbl_ClassEvents 여기
+----+------------+------+-----------+-----------+ 
| ID | date | Room | ClassName | HeadCount | 
+----+------------+------+-----------+-----------+ 
| 1 | 30/11/2017 | 101 | Intro  |  10 | 
| 2 | 30/11/2017 | 102 | intro  |  15 | 
| 3 | 30/11/2017 | 103 | Course 2 |   5 | 
| 4 | 01/12/2017 | 101 | Intro  |  10 | 
| 5 | 01/12/2017 | 102 | Course 2 |  15 | 
| 6 | 01/12/2017 | 103 | Course 3 |  10 | 
| 7 | 17/11/2017 | 101 | Intro  |  16 | 
+----+------------+------+-----------+-----------+ 

Table2: Tbl_ClassVsLaptop 
+----+-----------+----------------+ 
| Id | ClassName | LaptopId | 
+----+-----------+----------------+ 
| 1 | Intro  | LT.Intro_1  | 
| 2 | Intro  | LT.Intro_2  | 
| 3 | Intro  | LT.Intro_3  | 
| 4 | Intro  | LT.Intro_4  | 
| 5 | Intro  | LT.Intro_5  | 
| 6 | Intro  | LT.Intro_6  | 
| 7 | Intro  | LT.Intro_7  | 
| 8 | Intro  | LT.Intro_8  | 
| 9 | Intro  | LT.Intro_9  | 
| 10 | Intro  | LT.Intro_10 | 
| 11 | Intro  | LT.Intro_11 | 
| 12 | Intro  | LT.Intro_12 | 
| 13 | Intro  | LT.Intro_13 | 
| 14 | Intro  | LT.Intro_14 | 
| 15 | Intro  | LT.Intro_15 | 
| 16 | Intro  | LT.Intro_16 | 
| 17 | Intro  | LT.Intro_17 | 
| 18 | Intro  | LT.Intro_18 | 
| 19 | Intro  | LT.Intro_19 | 
| 20 | Intro  | LT.Intro_20 | 
| 21 | Intro  | LT.Intro_21 | 
| 22 | Intro  | LT.Intro_22 | 
| 23 | Intro  | LT.Intro_23 | 
| 24 | Intro  | LT.Intro_24 | 
| 25 | Intro  | LT.Intro_25 | 
| 26 | Intro  | LT.Intro_26 | 
| 27 | Intro  | LT.Intro_27 | 
| 28 | Intro  | LT.Intro_28 | 
| 29 | Intro  | LT.Intro_29 | 
| 30 | Intro  | LT.Intro_30 | 
| 31 | Course 2 | LT.Course 2_1 | 
| 32 | Course 2 | LT.Course 2_2 | 
| 33 | Course 2 | LT.Course 2_3 | 
| 34 | Course 2 | LT.Course 2_4 | 
| 35 | Course 2 | LT.Course 2_5 | 
| 36 | Course 2 | LT.Course 2_6 | 
| 37 | Course 2 | LT.Course 2_7 | 
| 38 | Course 2 | LT.Course 2_8 | 
| 39 | Course 2 | LT.Course 2_9 | 
| 40 | Course 2 | LT.Course 2_10 | 
| 41 | Course 2 | LT.Course 2_11 | 
| 42 | Course 2 | LT.Course 2_12 | 
| 43 | Course 2 | LT.Course 2_13 | 
| 44 | Course 2 | LT.Course 2_14 | 
| 45 | Course 2 | LT.Course 2_15 | 
| 46 | Course 2 | LT.Course 2_16 | 
| 47 | Course 2 | LT.Course 2_17 | 
| 48 | Course 2 | LT.Course 2_18 | 
| 49 | Course 2 | LT.Course 2_19 | 
| 50 | Course 2 | LT.Course 2_20 | 
| 51 | Course 2 | LT.Course 2_21 | 
| 52 | Course 2 | LT.Course 2_22 | 
| 53 | Course 2 | LT.Course 2_23 | 
| 54 | Course 2 | LT.Course 2_24 | 
| 55 | Course 2 | LT.Course 2_25 | 
| 56 | Course 2 | LT.Course 2_26 | 
| 57 | Course 2 | LT.Course 2_27 | 
| 58 | Course 2 | LT.Course 2_28 | 
| 59 | Course 2 | LT.Course 2_29 | 
| 60 | Course 2 | LT.Course 2_30 | 
| 61 | Course 3 | LT.Course 3_1 | 
| 62 | Course 3 | LT.Course 3_2 | 
| 63 | Course 3 | LT.Course 3_3 | 
| 64 | Course 3 | LT.Course 3_4 | 
| 65 | Course 3 | LT.Course 3_5 | 
| 66 | Course 3 | LT.Course 3_6 | 
| 67 | Course 3 | LT.Course 3_7 | 
| 68 | Course 3 | LT.Course 3_8 | 
| 69 | Course 3 | LT.Course 3_9 | 
| 70 | Course 3 | LT.Course 3_10 | 
| 71 | Course 3 | LT.Course 3_11 | 
| 72 | Course 3 | LT.Course 3_12 | 
| 73 | Course 3 | LT.Course 3_13 | 
| 74 | Course 3 | LT.Course 3_14 | 
| 75 | Course 3 | LT.Course 3_15 | 
| 76 | Course 3 | LT.Course 3_16 | 
| 77 | Course 3 | LT.Course 3_17 | 
| 78 | Course 3 | LT.Course 3_18 | 
| 79 | Course 3 | LT.Course 3_19 | 
| 80 | Course 3 | LT.Course 3_20 | 
| 81 | Course 3 | LT.Course 3_21 | 
| 82 | Course 3 | LT.Course 3_22 | 
| 83 | Course 3 | LT.Course 3_23 | 
| 84 | Course 3 | LT.Course 3_24 | 
| 85 | Course 3 | LT.Course 3_25 | 
| 86 | Course 3 | LT.Course 3_26 | 
| 87 | Course 3 | LT.Course 3_27 | 
| 88 | Course 3 | LT.Course 3_28 | 
| 89 | Course 3 | LT.Course 3_29 | 
| 90 | Course 3 | LT.Course 3_30 | 
+----+-----------+----------------+ 

쿼리입니다
+----+------------+------+-----------+-----------+---------------+----------------+ 
| ID | DATE | Room | ClassName | HeadCount | FirstLaptop | LastLaptop | 
+----+------------+------+-----------+-----------+---------------+----------------+ 
| 7 | 17/11/2017 | 101 | Intro  |  16 | LT.Intro_1 | LT.Intro_16 | 
| 1 | 30/11/2017 | 101 | Intro  |  10 | LT.Intro_1 | LT.Intro_10 | 
| 2 | 30/11/2017 | 102 | intro  |  15 | LT.Intro_11 | LT.Intro_25 | 
| 3 | 30/11/2017 | 103 | Course 2 |   5 | LT.Course 2_1 | LT.Course 2_5 | 
| 4 | 01/12/2017 | 101 | Intro  |  10 | LT.Intro_1 | LT.Intro_10 | 
| 5 | 01/12/2017 | 102 | Course 2 |  15 | LT.Course 2_1 | LT.Course 2_15 | 
| 6 | 01/12/2017 | 103 | Course 3 |  10 | LT.Course 3_1 | LT.Course 3_10 | 
+----+------------+------+-----------+-----------+---------------+----------------+