2016-08-07 51 views
0

我已經盡了全力,在過去幾天,谷歌這一點,但我無法找到我需要的MS Access或MySQL返回最後5個結果基於日期和組

我的足球結果表解我想根據日期將每個主隊的最後5個結果撤回。

我已經試過這個訪問MS建議後,我無法讓它工作如何說它應該。我對MySQL非常陌生,與下面的代碼有點接近,但只返回最後一個結果,如果我將它更改爲2,由於子查詢返回多於一行,它將不會運行。我不需要確切的答案,我很高興如果有人可以給我一個鏈接跟隨訪問或MySQL。以下是我正在使用哪個返回最後結果的罰款。

SELECT t1.* 
FROM TBL_ALL_English_Results t1 
WHERE t1.id = (SELECT t2.id 
      FROM TBL_ALL_English_Results t2 
      WHERE t2.Home_Team = t1.Home_Team    
      ORDER BY t2.id DESC 
      LIMIT 1) 

回答

0

考慮使用相關的數彙總查詢,通過DATEHOME_TEAM組計算的記錄的排序,然後使用該排名以過濾查詢結果。下面應該符合MySQL和MS Access,甚至SQL Server和其他方言。

SELECT t1.* 
FROM TBL_ALL_English_Results t1 
INNER JOIN 
(
    SELECT t2.Home_Team, t2.Date, 
      (SELECT Count(*) FROM TBL_ALL_English_Results sub 
      WHERE t2.Date <= sub.Date 
      AND t2.Home_Team = sub.Home_Team) AS GameOrder 
    FROM TBL_ALL_English_Results As t2 
) AS LastFiveDates 
ON t1.Date = LastFiveDates.Date 
AND t1.Home_Team = LastFiveDates.Home_Team 
WHERE LastFiveDates.GameOrder <= 5 

雖然大多數數據庫可以運行此查詢,性能可能尤其是在文件級數據庫,MS訪問不同,如果表中結果高於10,000,而不是服務器級關係數據庫管理系統,MySQL的。

0

MySQL使這有點困難。也許最簡單的方法是使用變量:

SELECT aer.* 
FROM (SELECT aer.*, 
      (@rn := if(@ht = aer.Home_Team, @rn + 1, 
         if(@ht := aer.Home_Team, 1, 1) 
         ) 
      ) as rn 
     FROM TBL_ALL_English_Results aer CROSS JOIN 
      (SELECT @ht := '', @rn := 0) params 
     ORDER BY aer.Home_Team, aer.id DESC 
    ) aer 
WHERE rn <= 5; 
+0

哇我完全失去了上面發生的事情,因爲我說我是MySQL的新手。但是,我感謝你的時間,但我收到了以下錯誤,因爲我迷失了這個,我不知道在哪裏看**'[Err] 1064 - 你的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊,在'@ht:= aer.Home_Team,1,1'附近使用正確的語法) ) '在第4行'** – colic0

+0

這是使用變量枚舉每個主隊的表中的行。這通常是MySQL中最簡單的方法。在大多數其他數據庫(但不是MS Access)中,您可以使用ANSI標準函數'row_number()'。 –

相關問題