我有以下的輸入表:如何在訪問查詢中獲取多個最大計數值?
我的目標是提取具有針對每個日期的每個受訪者的最高CountOfObject_Type記錄。
從前兩個記錄我想獲得第一條記錄,因爲它有最高的對象類型的計數。
第二個將被排除,因爲Date,Respondent ID和Country與第一條記錄相同。
這是我期待的輸出:
我已經writen下面的查詢,但它僅返回一個值(最大值)。但我想獲得按日期,被訪者ID和國家分組的多個最大值。
我有以下的輸入表:如何在訪問查詢中獲取多個最大計數值?
我的目標是提取具有針對每個日期的每個受訪者的最高CountOfObject_Type記錄。
從前兩個記錄我想獲得第一條記錄,因爲它有最高的對象類型的計數。
第二個將被排除,因爲Date,Respondent ID和Country與第一條記錄相同。
這是我期待的輸出:
我已經writen下面的查詢,但它僅返回一個值(最大值)。但我想獲得按日期,被訪者ID和國家分組的多個最大值。
Access的最大問題之一是它缺少ROW_NUMBER()函數,其中包含OVER()和PARTITION BY()。這種組合使得輕鬆的工作「選擇整個記錄,其中一個字段是組中最高/最先的」類型查詢。在Access中,我們需要一種解決方法。很抱歉,您的數據沒有自然的排名標識符因此,我們必須按照您的數據顯示爲有序的順序創建一個(Dat,Respondent_ID,Country和Object_Type)。既然你沒有回答國家是否應該被列入分組,我給出了兩個版本。
沒有一個國家集團:
SELECT fD.Dat, fD.Respondent_ID, fd.Object_Type, fD.Country,
fD.CountOfObject_Type
FROM
(SELECT MIN(ID) AS MinID, Dat, Respondent_ID,
MAX(CountOfObject_Type) AS MaxCount
FROM
(SELECT (SELECT COUNT(*) FROM YourTable
WHERE (Dat = g.Dat AND Respondent_ID & Country & Object_Type
<= g.Respondent_ID & g.Country & g.Object_Type)
OR (Dat < g.Dat)) AS ID,
g.Dat, g.Respondent_ID,g.Country,g.Object_Type, g.CountOfObject_Type
FROM YourTable g
ORDER BY g.Dat, g.Respondent_ID, g.Country, g.Object_type) o
GROUP BY Dat, Respondent_ID) mC
INNER JOIN
(SELECT (SELECT COUNT(*) FROM YourTable
WHERE (Dat = g.Dat AND Respondent_ID & Country & Object_Type
<= g.Respondent_ID & g.Country & g.Object_Type)
OR (Dat < g.Dat)) AS ID,
g.Dat, g.Respondent_ID,g.Country,g.Object_Type, g.CountOfObject_Type
FROM YourTable g
ORDER BY g.Dat, g.Respondent_ID, g.Country, g.Object_type) fD
ON mC.MinID = fD.Id
隨着國家在分組:
SELECT fD.Dat, fD.Respondent_ID, fd.Object_Type, fD.Country,
fD.CountOfObject_Type
FROM
(SELECT MIN(ID) AS MinID, Dat, Respondent_ID, Country,
MAX(CountOfObject_Type) AS MaxCount
FROM
(SELECT (SELECT COUNT(*) FROM YourTable
WHERE (Dat = g.Dat AND Respondent_ID & Country & Object_Type
<= g.Respondent_ID & g.Country & g.Object_Type)
OR (Dat < g.Dat)) AS ID,
g.Dat, g.Respondent_ID,g.Country,g.Object_Type, g.CountOfObject_Type
FROM YourTable g
ORDER BY g.Dat, g.Respondent_ID, g.Country, g.Object_type) o
GROUP BY Dat, Respondent_ID, Country) mC
INNER JOIN
(SELECT (SELECT COUNT(*) FROM YourTable
WHERE (Dat = g.Dat AND Respondent_ID & Country & Object_Type
<= g.Respondent_ID & g.Country & g.Object_Type)
OR (Dat < g.Dat)) AS ID,
g.Dat, g.Respondent_ID,g.Country,g.Object_Type, g.CountOfObject_Type
FROM YourTable g
ORDER BY g.Dat, g.Respondent_ID, g.Country, g.Object_type) fD
ON mC.MinID = fD.Id
請不要在你的問題採用隨機標籤。請仔細閱讀標籤的描述,因爲有些標籤可能用於不同的目的,而不是僅僅考慮其名稱(請參閱access vs ms-access)。 – Shadow
這裏的大多數人想要格式化文本,而不是圖像。 (我無法閱讀那些小圖像文字。) – jarlh
並且請添加您嘗試查詢的代碼。 – Shadow