0

解決できないと思われるクエリの問題について誰かが助けてくれることを願っています。

2 つのテーブルがあります。

表1

T1_ID
T1_Serial

表2

T2_ID
T1_ID –lookup to Table 1
T2_Date
T2_History

Table1 データは次のようになります。

T1_ID   T1_Serial
1,  ABC1
2,  ABC2
3,  ABC3
4,  ABC4

Table2 データは次のようになります。

T2_ID,  T1_ID,  T2_Date,    T2_History
1,  1,  05/05/15,   “Some History1”
2,  1,  05/17/15,   “Some History2”
3,  2,  05/09/15,   “Some History3”
4,  2,  05/21/15,   “Some History4”
5,  3,  05/12/15,   “Some History5”

テーブル Units の各レコードのテーブル History の Max(Date) を含むレコードを取得するクエリを設定したいと思います

Table1.T1_Serial、Max(T2_Date)、T2_History;

この例では;

ABC1    05/17/15    “Some History2”
ABC2    05/21/15    “Some History4”
ABC3    05/12/15    “Some History5”

T1_Serial と Max(Date) を取得するための SQL を作成しましたが、これは正しく機能しています。

SELECT Table2.T1_ID,  Max(Table2.T2_Date) AS MaxDate
FROM Table2
GROUP BY Table2.T1_ID;

しかし、T2_History をクエリに追加しようとすると、Max(Date) 以外のすべての履歴を取得することになります。

誰かが私を正しい道に導いてくれることを願っています。ありがとう!

4

2 に答える 2

0

VBA のネストされたクエリのこの例を見つけました。しかし、私はそれを試すことができませんでした。幸運を。

Sub TestNestedQuery()
    Dim RS As DAO.Recordset, strSql As String
    Dim qdfTemp As QueryDef
    Dim qdfNew As QueryDef
    Dim strSQL1 as string
    Dim strSQL2 as string


   strSQL1 = "SELECT RMA_ID, Max(tbl_History.Hist_Date) as MaxDate " & _
             "FROM tbl_History " & _ 
             "Group by tbl_History.RMA_ID"

   strSQL2 = "SELECT tbl_RMAunit.RMA_SN, tbl_History.Hist_Date,tbl_History.Hist_History " & _
             "FROM  qryTemp " & _
             "Inner Join tbl_History on qryTemp.MaxDate = tbl_History.Hist_Date  " & _
             "Inner Join tbl_RMAunit on qryTemp.RMA_ID = tbl_RMAunit.RMA_ID "

    With CurrentDb()
        Set qdfTemp = .CreateQueryDef("qryTemp", strSQL1) '' SQL 1

        Set qdfNew = .CreateQueryDef("qryNew", strSQL2)' SQL 2

        GetrstTemp qdfNew

        ''' Delete the two querydefs if necessary
        .QueryDefs.Delete qdfTemp.Name
        .QueryDefs.Delete qdfNew.Name
    End With

End Sub

Function GetrstTemp(qdfTemp As QueryDef)

   Dim rstTemp As DAO.Recordset
   Dim i As Integer: i = 0

   With qdfTemp
      Debug.Print .Name
      Debug.Print "  " & .sql
      '' Open Recordset from QueryDef.
      Set rstTemp = .OpenRecordset(dbOpenSnapshot)


      Do While Not rstTemp.EOF
          i = i + 1
          Debug.Print rstTemp.Fields("RMA_SN")    '' Change the field name 
          Debug.Print rstTemp.Fields("Hist_Date") '' Change the field name 
          rstTemp.MoveNext
      Loop
      Debug.Print
      Debug.Print "  Number of records = " & _
      rstTemp.RecordCount
   End With

End Function
于 2015-06-03T14:56:18.157 に答える