Mysql 获取最后一条记录的子查询

Mysql 获取最后一条记录的子查询,mysql,sql,Mysql,Sql,我有两个表:User和Session。对于每个用户,我想知道会话表中的最后一条记录是否是去年创建的 我尝试了以下方法,但无效: SELECT * FROM( SELECT MAX(`Session`.acDateF) as MaxDateF FROM `Session` WHERE `Session`.acType='1' ) as AcDate GROUP BY `Session`.userId) WHERE YEAR(`Session`.acDateF) =YEAR

我有两个表:
User
Session
。对于每个用户,我想知道会话表中的最后一条记录是否是去年创建的

我尝试了以下方法,但无效:

SELECT *
FROM(
    SELECT MAX(`Session`.acDateF) as MaxDateF
    FROM `Session`
    WHERE `Session`.acType='1'
) as AcDate
GROUP BY `Session`.userId) 
WHERE YEAR(`Session`.acDateF) =YEAR(CURRENT_DATE())-1

如果用户今年在
会话
表中有记录,则不会出现在结果中。

您的问题不是很清楚,但听起来您希望这样:

SELECT
    MAX(`Session`.acDateF) as MaxDateF,
    `Session`.userId
FROM `Session`
WHERE `Session`.acType='1'
GROUP BY `Session`.userId
having MAX(YEAR(`Session`.acDateF)) as MaxDateF =YEAR(CURRENT_DATE())-1
SELECT * 
FROM `Session` s
INNER JOIN 
(
    SELECT MAX(`Session`.acDateF) as MaxDateF, `Session`.userId
    FROM `Session`
    WHERE `Session`.acType='1'
        AND YEAR(s.acDateF) =YEAR(CURRENT_DATE())-1
    GROUP `Session`.userId
) as AcDate
    ON s.userId = AcDate.userId
    AND s.acDateF = AcDate.MaxDateF;
或者,如果您需要用户数据:

SELECT * 
FROM `user` u
INNER JOIN 
(
    SELECT MAX(`Session`.acDateF) as MaxDateF, `Session`.userId
    FROM `Session`
    WHERE `Session`.acType='1'
        AND YEAR(s.acDateF) =YEAR(CURRENT_DATE())-1
    GROUP `Session`.userId
) as AcDate
    ON u.userId = AcDate.userId;    

这里有一个方法。它使用
where
子句中的相关子查询来获取上一年的最后日期:

select *
from session s
where s.acDatef = (select MAX(se.acDatef)
                   from session s2
                   where s2.userid = s.userid and
                         YEAR(`Session`.acDateF) =YEAR(CURRENT_DATE())-1
                  )
您是否希望“as AcDate”按语句排在您的组后面?