回答編集履歴

6

追記

2018/03/22 17:04

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -73,3 +73,39 @@
73
73
  T1.日時, T1.場所, T1.会員番号;
74
74
 
75
75
  ```
76
+
77
+
78
+
79
+ 上記が理解できないなら、下記の2つのクエリと同じ意味になります。
80
+
81
+
82
+
83
+ クエリ―名:a
84
+
85
+ ```SQL
86
+
87
+ SELECT Max(日時) AS 最新日時, 会員番号, 場所
88
+
89
+ FROM T1
90
+
91
+ WHERE T1.場所="bb"
92
+
93
+ GROUP BY 会員番号, 場所;
94
+
95
+ ```
96
+
97
+ ```SQL
98
+
99
+ SELECT First(T1.名称) AS 名称の先頭, T1.日時, T1.場所, T1.会員番号
100
+
101
+ FROM
102
+
103
+ T1 INNER JOIN a
104
+
105
+ ON T1.会員番号 = a.会員番号 AND T1.日時 = a.最新日時 AND T1.場所 = a.場所
106
+
107
+ GROUP BY T1.日時, T1.場所, T1.会員番号;
108
+
109
+ ```
110
+
111
+ 上記の2つをデザインビューで見れば、何をしているか理解しやすいでしょう。

5

結果画像の追加

2018/03/22 17:04

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -11,6 +11,12 @@
11
11
  DLookup("ID","T1","日時 = #" & DMax("日時","T1","会員番号='" & [会員番号] & "' And 場所='" & [場所] & "'") & "#")
12
12
 
13
13
  ```
14
+
15
+ ※コメントで、想定通りにならないとのことなので、提示のサンプルデータでの結果画像を貼っておきます。
16
+
17
+ ![![クエリ結果](78304e9fee3f9fdbef697cb36b1e98c6.png)]
18
+
19
+ 名称「CC」が最新の日付ですので、これが正しいと思います。
14
20
 
15
21
 
16
22
 

4

追記のSQLの間違いを修正

2018/03/22 12:08

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  SELECT
46
46
 
47
- First(T1.名称) AS 名称, 日時, 場所, 会員番号
47
+ First(T1.名称) AS 名称, T1.日時, T1.場所, T1.会員番号
48
48
 
49
49
  FROM
50
50
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  FROM T1
56
56
 
57
- WHERE 場所="bb"
57
+ WHERE T1.場所="bb"
58
58
 
59
59
  GROUP BY 会員番号, 場所
60
60
 
@@ -64,6 +64,6 @@
64
64
 
65
65
  GROUP BY
66
66
 
67
- 日時, 場所, 会員番号;
67
+ T1.日時, T1.場所, T1.会員番号;
68
68
 
69
69
  ```

3

コメントを受けての追記

2018/03/22 11:50

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -29,6 +29,10 @@
29
29
  追記
30
30
 
31
31
  ---
32
+
33
+ ※レコードの特定とのコメントがあったので、下記の案はだめですね。
34
+
35
+
32
36
 
33
37
  表示するフィールドが 名称, 日時, 場所, 会員番号 の4フィールドだけでいいのなら、
34
38
 

2

コードの追記

2018/03/22 04:31

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -23,3 +23,43 @@
23
23
  (SELECT TOP 1 ID FROM T1 AS T2 WHERE 場所='bb' AND T1.会員番号=T2.会員番号 ORDER BY 日時 DESC, ID)
24
24
 
25
25
  ```
26
+
27
+
28
+
29
+ 追記
30
+
31
+ ---
32
+
33
+ 表示するフィールドが 名称, 日時, 場所, 会員番号 の4フィールドだけでいいのなら、
34
+
35
+ 下記のSQLが高速かな。(D系関数や相関サブクエリは重いので)
36
+
37
+
38
+
39
+ ```SQL
40
+
41
+ SELECT
42
+
43
+ First(T1.名称) AS 名称, 日時, 場所, 会員番号
44
+
45
+ FROM
46
+
47
+ T1 INNER JOIN
48
+
49
+ (SELECT Max(日時) AS 最新日時, 会員番号, 場所
50
+
51
+ FROM T1
52
+
53
+ WHERE 場所="bb"
54
+
55
+ GROUP BY 会員番号, 場所
56
+
57
+ ) AS a
58
+
59
+ ON T1.会員番号 = a.会員番号 AND T1.日時 = a.最新日時 AND T1.場所 = a.場所
60
+
61
+ GROUP BY
62
+
63
+ 日時, 場所, 会員番号;
64
+
65
+ ```

1

コードの追加

2018/03/20 19:39

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -10,6 +10,16 @@
10
10
 
11
11
  DLookup("ID","T1","日時 = #" & DMax("日時","T1","会員番号='" & [会員番号] & "' And 場所='" & [場所] & "'") & "#")
12
12
 
13
+ ```
13
14
 
14
15
 
16
+
17
+ あるいは、サブクエリを使って、
18
+
19
+
20
+
21
+ ```SQL
22
+
23
+ (SELECT TOP 1 ID FROM T1 AS T2 WHERE 場所='bb' AND T1.会員番号=T2.会員番号 ORDER BY 日時 DESC, ID)
24
+
15
25
  ```