2017-08-10 34 views
-3

我有以下的輸入表:如何在訪問查詢中獲取多個最大計數值?

enter image description here

我的目標是提取具有針對每個日期的每個受訪者的最高CountOfObject_Type記錄。

從前兩個記錄我想獲得第一條記錄,因爲它有最高的對象類型的計數。

第二個將被排除,因爲Date,Respondent ID和Country與第一條記錄相同。

這是我期待的輸出:

enter image description here

我已經writen下面的查詢,但它僅返回一個值(最大值)。但我想獲得按日期,被訪者ID和國家分組的多個最大值。

+4

請不要在你的問題採用隨機標籤。請仔細閱讀標籤的描述,因爲有些標籤可能用於不同的目的,而不是僅僅考慮其名稱(請參閱access vs ms-access)。 – Shadow

+2

這裏的大多數人想要格式化文本,而不是圖像。 (我無法閱讀那些小圖像文字。) – jarlh

+2

並且請添加您嘗試查詢的代碼。 – Shadow

回答

0

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 
+0

非常感謝。這正是我期待的。 – Ayaz49

+0

我的榮幸。很高興有幫助。 –

+0

先生你可以。請回答這個問題,我不能解決這個問題,並沒有得到我想要的結果https://stackoverflow.com/questions/45712200/how-can-i-get-selective-records-from-a-table-in-訪問/ 45714919#45714919 – Ayaz49

相關問題