过去几天我一直在努力谷歌,但我找不到MS Access或MySQL所需的解决方案
我有一张足球比赛结果表,我希望根据日期将每个主队的最后5个结果拉回来。
我在MS建议的访问中试过这个,我无法让它工作如何说它应该。我对MySQL很新,并且使用下面的代码更接近但是只返回最后的结果,如果我将其更改为2,则由于Subquery返回超过1行而无法运行。我不需要确切的答案如果有人可以给我一个链接来访问Access或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 :(得分: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;
答案 1 :(得分:0)
考虑使用相关计数聚合查询,该查询按DATE
和HOME_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
虽然大多数数据库都可以运行此查询,但是如果表结果高于10,000而不是服务器级RDMS,MySQL,则性能可能会有所不同,特别是在文件级数据库MS Access中。