teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

追記

2018/03/22 17:04

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -35,4 +35,22 @@
35
35
  ON T1.会員番号 = a.会員番号 AND T1.日時 = a.最新日時 AND T1.場所 = a.場所
36
36
  GROUP BY
37
37
  T1.日時, T1.場所, T1.会員番号;
38
- ```
38
+ ```
39
+
40
+ 上記が理解できないなら、下記の2つのクエリと同じ意味になります。
41
+
42
+ クエリ―名:a
43
+ ```SQL
44
+ SELECT Max(日時) AS 最新日時, 会員番号, 場所
45
+ FROM T1
46
+ WHERE T1.場所="bb"
47
+ GROUP BY 会員番号, 場所;
48
+ ```
49
+ ```SQL
50
+ SELECT First(T1.名称) AS 名称の先頭, T1.日時, T1.場所, T1.会員番号
51
+ FROM
52
+ T1 INNER JOIN a
53
+ ON T1.会員番号 = a.会員番号 AND T1.日時 = a.最新日時 AND T1.場所 = a.場所
54
+ GROUP BY T1.日時, T1.場所, T1.会員番号;
55
+ ```
56
+ 上記の2つをデザインビューで見れば、何をしているか理解しやすいでしょう。

5

結果画像の追加

2018/03/22 17:04

投稿

hatena19
hatena19

スコア34367

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

4

追記のSQLの間違いを修正

2018/03/22 12:08

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -21,15 +21,15 @@
21
21
 
22
22
  ```SQL
23
23
  SELECT
24
- First(T1.名称) AS 名称, 日時, 場所, 会員番号
24
+ First(T1.名称) AS 名称, T1.日時, T1.場所, T1.会員番号
25
25
  FROM
26
26
  T1 INNER JOIN
27
27
  (SELECT Max(日時) AS 最新日時, 会員番号, 場所
28
28
  FROM T1
29
- WHERE 場所="bb"
29
+ WHERE T1.場所="bb"
30
30
  GROUP BY 会員番号, 場所
31
31
  ) AS a
32
32
  ON T1.会員番号 = a.会員番号 AND T1.日時 = a.最新日時 AND T1.場所 = a.場所
33
33
  GROUP BY
34
- 日時, 場所, 会員番号;
34
+ T1.日時, T1.場所, T1.会員番号;
35
35
  ```

3

コメントを受けての追記

2018/03/22 11:50

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -14,6 +14,8 @@
14
14
 
15
15
  追記
16
16
  ---
17
+ ※レコードの特定とのコメントがあったので、下記の案はだめですね。
18
+
17
19
  表示するフィールドが 名称, 日時, 場所, 会員番号 の4フィールドだけでいいのなら、
18
20
  下記のSQLが高速かな。(D系関数や相関サブクエリは重いので)
19
21
 

2

コードの追記

2018/03/22 04:31

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -10,4 +10,24 @@
10
10
 
11
11
  ```SQL
12
12
  (SELECT TOP 1 ID FROM T1 AS T2 WHERE 場所='bb' AND T1.会員番号=T2.会員番号 ORDER BY 日時 DESC, ID)
13
+ ```
14
+
15
+ 追記
16
+ ---
17
+ 表示するフィールドが 名称, 日時, 場所, 会員番号 の4フィールドだけでいいのなら、
18
+ 下記のSQLが高速かな。(D系関数や相関サブクエリは重いので)
19
+
20
+ ```SQL
21
+ SELECT
22
+ First(T1.名称) AS 名称, 日時, 場所, 会員番号
23
+ FROM
24
+ T1 INNER JOIN
25
+ (SELECT Max(日時) AS 最新日時, 会員番号, 場所
26
+ FROM T1
27
+ WHERE 場所="bb"
28
+ GROUP BY 会員番号, 場所
29
+ ) AS a
30
+ ON T1.会員番号 = a.会員番号 AND T1.日時 = a.最新日時 AND T1.場所 = a.場所
31
+ GROUP BY
32
+ 日時, 場所, 会員番号;
13
33
  ```

1

コードの追加

2018/03/20 19:39

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -4,5 +4,10 @@
4
4
 
5
5
  ```
6
6
  DLookup("ID","T1","日時 = #" & DMax("日時","T1","会員番号='" & [会員番号] & "' And 場所='" & [場所] & "'") & "#")
7
+ ```
7
8
 
9
+ あるいは、サブクエリを使って、
10
+
11
+ ```SQL
12
+ (SELECT TOP 1 ID FROM T1 AS T2 WHERE 場所='bb' AND T1.会員番号=T2.会員番号 ORDER BY 日時 DESC, ID)
8
13
  ```