【发布时间】:2012-02-23 11:39:23
【问题描述】:
我有一个包含四个表的小型 MS Access 数据库,并且正在努力处理涉及所有表的 MAX(Date) 查询。任何帮助将不胜感激。
数据库概览:
TABLE COLUMNS
Person Person_ID |....
Games Game_ID | Name |....
Played_Games Played_Games_ID | Game_ID | Date |....
Participation Played_Games_ID | Person_ID |...
列出所有游戏以及我使用的任何人最后一次玩这些游戏的日期:
SELECT DISTINCT Games.Name,
(SELECT MAX(Date) FROM Played_Games WHERE Played_Games.Game_ID = Games.Game_ID) AS Date_Last_Played
FROM Games
ORDER BY Games.Name
这很好用,但我还想列出他们每个人最后一次被某个群体的成员玩的日期。对此的任何帮助将不胜感激。
几天前我问了一个similar question,但后来我的目标是列出所有游戏,每场比赛总共玩了多少次,以及某个群体的成员每场比赛玩了多少次(人 1 和 2 只是一个例子)。 GarethD 通过下面的代码帮助我解决了这个问题。我试图改变这段代码来解决我的新任务,因为我猜这个逻辑/结构的大部分可以重复使用,但到目前为止我自己还没有成功:-(
SELECT Games.Name,
IIF(ISNULL(TimesPlayed),0,TimesPlayed) AS Times_Played,
IIF(ISNULL(TimesPlayedByGroupMembers),0,TimesPlayedByGroupMembers) AS Times_Played_By_Group_Members
FROM Games
LEFT JOIN
( SELECT Game_ID,
COUNT(*) AS TimesPlayed,
SUM(IIF(ISNULL(Participation.Played_Games_ID),0,1)) AS TimesPlayedByGroupMembers
FROM Played_Games
LEFT JOIN
( SELECT Played_games_ID
FROM Participation
WHERE Person_ID IN (1, 2)
GROUP BY Played_games_ID
) AS Participation
ON Participation.Played_Games_ID = Played_Games.Played_Games_ID
GROUP BY Game_ID
) AS Played_Games
ON Played_Games.Game_ID = Games.Game_ID
ORDER BY Games.Name
任何帮助将不胜感激。感谢您的宝贵时间!
【问题讨论】:
-
“某组人的成员”不确定这是什么意思。您是否只需要添加一个 where 子句以便获得您想要的玩家?就像 Person_ID in (...) 一样?
-
感谢您的快速回复,并对我迟到的回复感到抱歉。
...AND Person_ID IN (...)在这种情况下是不够的,因为您必须找出、隔离然后仅对与这些特定人员相关的 Played_Games_ID 进行操作。感谢您的回复和您的帮助意愿,但问题现在由GarethD 解决。谢谢