如何在SQLite中获取每个用户的最新录入日期?分组查询时如何获取用户最后一次提交表单的日期?
解决SQLite分组查询获取用户最后提交日期的问题
这是个很常见的分组查询误区,我来帮你理清思路并解决问题~
首先得明确为什么你之前的语句达不到预期:SQLite在执行GROUP BY时,如果你选择了非聚合的列(比如直接SELECT *),它会默认返回分组里的第一条记录(也就是你看到的首次提交日期),而且ORDER BY是在分组完成后才执行的,所以对分组内的取值没有影响。
下面给你两种可行的解决方案:
方案1:仅获取用户ID和最后提交日期
如果只需要每个用户的ID和最后提交日期,直接用MAX()聚合函数就能搞定:
SELECT user_id, MAX(date) AS last_submit_date FROM answers GROUP BY user_id ORDER BY last_submit_date DESC;
MAX(date)会直接提取每个user_id分组里的最大(最新)日期,完美符合你的需求。
方案2:获取用户最后提交的整条记录
如果需要获取该用户最后提交表单的完整记录(不止ID和日期),可以用子查询关联原表:
SELECT a.* FROM answers a INNER JOIN ( -- 先子查询找出每个用户的最后提交日期 SELECT user_id, MAX(date) AS last_date FROM answers GROUP BY user_id ) b ON a.user_id = b.user_id AND a.date = b.last_date ORDER BY a.date DESC;
这个逻辑是:先通过子查询得到每个用户的user_id和对应的最后提交日期,再把这个结果和原表关联,匹配出每个用户最后提交的那条完整记录,最后按日期降序排序。
需要注意的是,如果同一个用户在同一时间提交了多条记录,这个语句会返回所有同时间的记录;如果要确保每个用户只返回一条,可以根据实际需求再加额外的筛选条件(比如主键ID的MAX值)。
内容的提问来源于stack exchange,提问作者RlM
相关产品推荐
相关产品推荐

