[英]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.