0

我希望有人可以帮助我解决我似乎无法解决的查询问题;

我有两张桌子;

表格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 中的每条记录提供包含表历史记录的 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”

我已经构建了 SQL 来给我 T1_Serial 和 Max(Date),它工作正常;

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

我使用与 Sam 类似的方法。但是从包装的 SQL 中删除了 T2_ID 以避免 GROUP BY 的问题。也按日期加入。

SQL小提琴

WITH MaxDate (T1_ID, MaxDate) as 
(
    SELECT T1_ID, Max(Table2.T2_Date) AS MaxDate
    FROM Table2
    GROUP BY Table2.T1_ID
)
SELECT T1_Serial, T2_Date, T2_History
FROM 
           MaxDate 
INNER JOIN Table2 ON MaxDate.MaxDate = Table2.T2_Date
INNER JOIN Table1 ON MaxDate.T1_ID = Table1.T1_ID;

vba版小提琴

SELECT tbl_RMAunit.RMA_SN, tbl_History.Hist_Date,tbl_History.Hist_History 
FROM ( 
  SELECT RMA_ID, Max(tbl_History.Hist_Date) as MaxDate 
  FROM tbl_History 
  Group by tbl_History.RMA_ID 
) MaxDate 
Inner Join tbl_History on MaxDate.MaxDate = tbl_History.Hist_Date 
Inner Join tbl_RMAunit on MaxDate.RMA_ID = tbl_RMAunit.RMA_ID
于 2015-05-29T16:35:24.903 回答
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 回答