Mysql 使用分区获取表中每个项的最新记录的SQL替代方法

Mysql 使用分区获取表中每个项的最新记录的SQL替代方法,mysql,mariadb,partition,rowcount,Mysql,Mariadb,Partition,Rowcount,Im一直在查询数据库,以使用分区和行计数(在MariaDB版本10.4*上运行)集体获取最新记录或每个项目,但我想在MySQL版本5.7*数据库上查询相同的内容,但在那里不起作用。我想找出在MySQL数据库上工作的替代方案。请帮帮我。 查询如下 SELECT A_id, B_id, Created_at FROM ( SELECT a.id as A_id, b.id as B_id, b.Created_at, ROW_NUMBER() OVER (PARTITION

Im一直在查询数据库,以使用分区和行计数(在MariaDB版本10.4*上运行)集体获取最新记录或每个项目,但我想在MySQL版本5.7*数据库上查询相同的内容,但在那里不起作用。我想找出在MySQL数据库上工作的替代方案。请帮帮我。 查询如下

SELECT A_id, B_id, Created_at
FROM
(
   SELECT a.id as A_id, b.id as B_id, b.Created_at,
          ROW_NUMBER() OVER (PARTITION BY a.id ORDER BY b.Created_at DESC) AS rn
   FROM beta b 
   JOIN alpha a ON b.a_id = a.id 
) q
WHERE rn = 1

您可以使用“连接到”子查询来查找每个id的最新记录:

选择a.id作为a\u id,b.id作为b\u id,b.Created\u at 来自阿尔法a 内连接βb 在a.id=b.a\u id上 内连接 选择a.id作为max\u id,选择MAXb.Created\u at作为max\u Created\u at 来自阿尔法a a.id=b.a\u id上的内部连接beta b 按a.id分组 T 在t.max_id=a.id和t.max_created_at=b.created_at;
这里的想法是,上面别名为t的子查询的附加连接将只保留每个a.id的记录,该记录具有从B表中最新创建的_at值。这与您当前使用行编号的方法具有相同的效果,而实际上不需要使用分析函数。

我已经这样做了,但是在“on子句”@Mariwa You's right中我得到了这个错误未知列“t.id”。尝试更新的版本,它现在应该可以工作了。