我會盡力解釋我的問題及其背後的數據。Microsoft Access SQL只返回記錄,其中一組分組記錄中的最後一條記錄等於另一列中的某條記錄
我有一個Microsoft Access中的表格,其結構如下。
ID1,ID2,數據1,數據2
ID1 - 是標識項的數場(1,2,3,4等)
ID2 - 是一個數字字段標識對該項目的更改(1,2,3,4等...) 這些都設置爲主鍵。記錄需要兩個ID纔是唯一的。
數據1 - 同樣的事情,只是一個數據字段 - 包含關於(用戶誰進行了更改名稱)
數據2的變化信息的數據字段。
我需要對此數據運行SQL查詢以返回Data1中的特定項目的所有記錄,其中ID1 = 1,ID2 =該集合中的最新記錄。
ID2在最後一行可能會有所不同。因此,如果ID1是1,那麼ID1可能有7個ID2,所以7是我需要檢查的行。在ID1等於2的情況下,可能有3個項目,所以現在我需要SQL來檢查第7行ID1 = 1和第3行ID1 = 2,以確定該行中的Data1是否等於某個名稱。
從我已經能夠研究它似乎我需要使用分組來獲得ID1s在一起,但是我無法找到我正在尋找的是獲得最大項目每組ID1的ID2。
這是我到目前爲止的地方。
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
預期的結果是,如果我找名2從數據1我會得到兩排1-4和2-3。如果我在本例中查找Name5或2以外的任何其他名稱,我將不會收到任何行,因爲沒有最大ID2,它們的名稱是Data1列。
返回的錯誤是Data2不是聚合函數的一部分。我在技術上已經有Data1,所以我可以從返回的數據中取出它,但是如何根據我的上述要求檢索Data2。也許分組不是我需要去的方式。
我正在使用VB.NET通過OleDb連接訪問Microsoft Access數據庫。
任何幫助,將不勝感激。請讓我知道是否需要進一步的細節,我很樂意發佈。
一般GROUP BY規則說:如果指定了GROUP BY子句,在SELECT列表中的每個列引用必須要麼確定分組列或者是一組函數的參數! – jarlh
太好了,但是如果它是日期,文本或數字,我應該使用什麼函數從Data2檢索數據。這就是爲什麼我覺得分組不是要走的路。 –
添加一些示例表數據和預期結果。 (以及格式化文本。) – jarlh