Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用多个表按日期排序_Mysql_Union_Datediff - Fatal编程技术网

Mysql 使用多个表按日期排序

Mysql 使用多个表按日期排序,mysql,union,datediff,Mysql,Union,Datediff,我正在整理一个查询,以返回为运动队效力的前10名最年轻球员的列表 到目前为止,我已经通过使用表“出场次数””来做到这一点,该表包含一名球员(包含在球员表中)为首发队出场时的一行实例,通过使用DATEDIFF比较玩家的出生日期与比赛的比赛日期,然后根据此结果排序行,即最年轻的玩家已经参加过比赛。这似乎是正常的工作本身的一般外观 我现在面临的问题是,我还需要考虑球员作为替补出场的时间(替补表)。我创建了一个联合来查询出场和替补表——这确实会将准确的数据返回到某个点,但有一个例外——它会列出同一名球员

我正在整理一个查询,以返回为运动队效力的前10名最年轻球员的列表

到目前为止,我已经通过使用表“出场次数””来做到这一点,该表包含一名球员(包含在球员表中)为首发队出场时的一行实例,通过使用DATEDIFF比较玩家的出生日期比赛的比赛日期,然后根据此结果排序行,即最年轻的玩家已经参加过比赛。这似乎是正常的工作本身的一般外观

我现在面临的问题是,我还需要考虑球员作为替补出场的时间(替补表)。我创建了一个联合来查询出场和替补表——这确实会将准确的数据返回到某个点,但有一个例外——它会列出同一名球员两次,一行代表他们的最早出场,另一行代表他们的最早替补出场

我正在寻找如何最好地修改此查询的指导,以便每个玩家只返回一行。i、 e.如果其替换外观在其开始外观之前,则该外观是唯一应返回的外观

这就是我刚才运行的查询。服务器版本: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,
        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 
        substitutions S, matches M, 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