• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:access2007)

Access初心者必見!クエリで最新データを抽出する方法

このQ&Aのポイント
  • Access初心者のための、クエリで最新データを抽出する方法をご紹介します。
  • テーブル内のデータから、最新の情報のみを抽出する方法を解説します。
  • サブクエリの指定方法についても簡単に説明します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

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は、単なる練習であれば無視していいです。業務用の雛形だと改善すべきです。

NSrai
質問者

お礼

ご丁寧に教えていただきありがとうございます! 興奮して下記のSQL文をコピペしてみましたが 「かっこの使い方が正しくありません」と表示されます。 どうしてでしょうか・・・ SELECT   ID,   氏名,   名称 FROM   [SELECT       DLookup("ID", "T1", 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS ID,       氏名,       DLookup("名称", "T1", 氏名='" & [氏名] & "' AND 枝番=" & [枝番の最大]) AS 名称,       Max(枝番) AS 枝番の最大   FROM T1   GROUP BY T1.氏名]. AS [%$##@_Alias];

その他の回答 (2)

回答No.3

補足:図を添付しておきます。

回答No.1

SQL文を提示したがいいですよ。 SELECT     ID,     氏名,     名称 FROM     [SELECT ・・・     FROM T1     GROUP BY T1.氏名]. AS [%$##@_Alias]; このようにサブクエリは[]で囲むのが決まりです。

NSrai
質問者

補足

コメントありがとうございます。 アクセスが全くの素人なのでどこを触ればいいのかが全く分かりません。 素人でも分かるように教えていただけないでしょうか? ちなみに使用しているテーブル名は「業務状況」 です。 「T1」というのは何を示しているのでしょうか?

関連するQ&A