簡體   English   中英

Microsoft Access SQL 僅返回一組分組記錄中的最后一條記錄等於另一列中的記錄

[英]Microsoft Access SQL to return only records where the last record in a set of grouped records equals something in another column

我會盡力解釋我的問題及其背后的數據。

我在 Microsoft Access 中有一個表,其結構如下。

ID1、ID2、數據1、數據2

ID1 - 是標識項目的數字字段(1、2、3、4 等...)

ID2 - 是一個數字字段,用於標識該項目的更改(1、2、3、4 等...)這些都設置為主鍵。 需要兩個 ID 才能使記錄唯一。

Data1 - 包含有關更改信息的數據字段(進行更改的用戶名稱)

Data2 - 同樣的事情,只是一個數據字段。

我需要對此數據運行 SQL 查詢以返回 Data1 中特定項目的所有記錄,其中 ID1 = 假設為 1,ID2 = 該集中的最新記錄。

ID2 的最后一行可能有所不同。 因此,如果 ID1 為 1,則該 ID1 可能有 7 個 ID2,因此 7 將是我需要檢查的行。 當 ID1 等於 2 時,可能有 3 個項目,所以現在我需要 SQL 檢查第 7 行的 ID1=1 和第 3 行的 ID1=2,以確定該行中的 Data1 是否等於某個名稱。

從我已經能夠研究的內容來看,似乎我需要使用分組來將 ID1 放在一起,但是我無法找到我要查找的內容是從每個組的 ID2 中獲取最大項目ID1。

這是我目前所處的位置。

SELECT ID1, Max(ID2), Data1, Data2
FROM tbl_History
WHERE Data1 = 'name'
GROUP BY ID1
ORDER BY ID2 DESC

示例數據:

ID1  |  ID2  |  Data1  |  Data2
--------------------------------
 1       1      Name1      32
 1       2      Name2      23
 1       3      Name3      63
 1       4      Name2      53
 2       1      Name4      12
 2       2      Name5      16
 2       3      Name2      71

預期結果是,如果我從 Data1 中查找 Name2,我將同時獲得第 1-4 行和第 2-3 行。 如果我在此示例中查找 Name5 或除 2 以外的任何其他名稱,我將不會收到任何行,因為沒有最大 ID2 的名稱是 Data1 列。

返回的錯誤是 Data2 不是聚合函數的一部分。 從技術上講,我已經有了 Data1,所以我可以從返回的數據中取出它,但是如何根據我的上述要求檢索 Data2。 也許分組不是我需要的方式。

我正在使用 VB.NET 通過 OleDb 連接訪問 Microsoft Access 數據庫。

任何幫助,將不勝感激。 如果需要任何進一步的細節,請告訴我,我很樂意發布它們。

where子句中使用相關子查詢:

select h.*
from tbl_history as h
where h.id2 = (select max(h2.id2)
               from tbl_history as h2
               where h.id1 = h2.id1
              );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM