有个需求不知道怎么写 SQL,特来请教一下

如图表结构,现在需要根据 space_id&user_id 做 group by,然后查询 create_at 最大的那条数据,被难倒了,有没有大佬赐教一下。

如图表结构,现在需要根据 space_id&user_id 做 group by,然后查询 create_at 最大的那条数据,被难倒了,有没有大佬赐教一下。
@aragakiyuii #8 mysql
没试验,大概这个意思,效率不高
select space_id, user_i
from(
select space_id, user_id, row_number()over(partition by space_id, user_id order by create_at desc) num
from …..
)a
where number=1
根据这个特性,我们先对数据进行排序,然后在 Group By 即可得到你想要的结果。
但是在 MariaDB 中,该方法并不起效果,需要额外引入一个莫名其妙的语句: LIMIT 18446744073709551615
所以最终的 SQL 是: SELECT ….. ( SELECT …. ORDER BY create_at DESC LIMIT 18446744073709551615) AS a GROUP BY space_id, user_id
或者上说的窗口函数更简单
SELECT
t.*
FROM (
SELECT
t.*,
ROW_NUMBER() OVER(PARTITION BY space_id, user_id ORDER BY create_at DESC) AS row_num
FROM
table AS t
) AS a
WHERE
row_num = 1