如何解决ORDER BY datediff 使用多个表
我正在整理查询以返回为运动队效力的前 10 名最年轻球员的列表。
到目前为止,我已经通过使用包含玩家(包含在玩家表中)参加比赛的实例行的表“外观”来做到这一点起始球队,通过使用 DATEDIFF 将球员的出生日期与比赛的比赛日期进行比较,然后按照这个结果对行进行排序,即球员参加比赛的最年轻的年龄.这对于一般的外观似乎是可行的。
我现在遇到的问题是,我还需要考虑一名球员作为替补出场的时间(替补表)。我创建了一个 UNION 来查询出场表和替补表 - 这确实将准确的数据返回到一个点,但有一个例外 - 它列出了同一个球员两次,一行是他们最早出场,另一行是他们最早出现的替补出场。
我正在寻找有关如何最好地修改此查询以便为每个玩家返回一行的指导。即如果他们的替补出场是在他们开始出场之前,那是唯一应该被退回的。
这是我刚刚运行的查询。服务器版本:5.7.32。
(
SELECT
DISTINCT A.AppearancePlayerID AS id,CONCAT(P.PlayerFirstName,' ',P.PlayerLastName) AS playername,DATEDIFF(MIN(M.MatchDateTime),P.PlayerDOB) AS age_diff,P.PlayerDOB AS player_dob,MIN(M.MatchDateTime) AS match_date
FROM
appearances A,matches M,players P
WHERE
A.AppearanceMatchID = M.MatchID AND
P.PlayerID = A.AppearancePlayerID AND
DATE_FORMAT(P.PlayerDOB,'%d') != '00'
GROUP BY id
)
UNION
(
SELECT
DISTINCT S.SubstitutionPlayerIDIn AS id,MIN(M.MatchDateTime) AS match_date
FROM
substitutions S,players P
WHERE
S.SubstitutionMatchID = M.MatchID AND
P.PlayerID = S.SubstitutionPlayerIDIn AND
DATE_FORMAT(P.PlayerDOB,'%d') != '00'
GROUP BY id
)
ORDER BY age_diff ASC
LIMIT 0,10
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。