- ベストアンサー
Access初心者必見!クエリで最新データを抽出する方法
- Access初心者のための、クエリで最新データを抽出する方法をご紹介します。
- テーブル内のデータから、最新の情報のみを抽出する方法を解説します。
- サブクエリの指定方法についても簡単に説明します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
SELECT ID, 氏名, 名称 FROM [SELECT DLookup("ID", "T1", 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS ID, 氏名, DLookup("名称", "T1", 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS 名称, Max(枝番) AS 枝番の最大 FROM T1 GROUP BY T1.氏名]. AS [%$##@_Alias]; 以上のSQL文で目的は達成できます。 ■簡略化のポイント: SELECT DBLookup("SELECT ID FROM T1 WHERE 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS ID, 氏名, DBLookup("SELECT 名称 FROM T1 WHERE 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS 名称, Max(枝番) AS 枝番の最大 FROM T1 GROUP BY T1.氏名]; それは、Access の DLookup()関数を使うことです。そうすれば、サブクエリを利用しなくても条件に合致するレコードの<ID、氏名、名称、枝番の最大>を取得することができます。その後に、その SELECT文をサブクエリにすると超簡単ですよ。 ■DLookup()の代替関数のお勧め: DLookup("ID", "T1", 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS ID ↓ DBLookup("SELECT ID FROM T1 WHERE 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS ID 簡略化のポイントでは、DBlookup()を利用しています。 Public Function DBLookup(ByVal strQuerySQL As String, _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = Nz(DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function T1⇒業務内容に! 【注意】 1、テーブル構造には大きな問題点があります。 2、最大値が重複した場合の戻り値は保証されません。 1は、単なる練習であれば無視していいです。業務用の雛形だと改善すべきです。
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
SQL文を提示したがいいですよ。 SELECT ID, 氏名, 名称 FROM [SELECT ・・・ FROM T1 GROUP BY T1.氏名]. AS [%$##@_Alias]; このようにサブクエリは[]で囲むのが決まりです。
補足
コメントありがとうございます。 アクセスが全くの素人なのでどこを触ればいいのかが全く分かりません。 素人でも分かるように教えていただけないでしょうか? ちなみに使用しているテーブル名は「業務状況」 です。 「T1」というのは何を示しているのでしょうか?
お礼
ご丁寧に教えていただきありがとうございます! 興奮して下記のSQL文をコピペしてみましたが 「かっこの使い方が正しくありません」と表示されます。 どうしてでしょうか・・・ SELECT ID, 氏名, 名称 FROM [SELECT DLookup("ID", "T1", 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS ID, 氏名, DLookup("名称", "T1", 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS 名称, Max(枝番) AS 枝番の最大 FROM T1 GROUP BY T1.氏名]. AS [%$##@_Alias];