mysql 选择每个列对的5个最新行

0ejtzxu1  于 2022-12-03  发布在  Mysql
关注(0)|答案(1)|浏览(115)

我有一个很大的表(超过100万行),其结构类似于下面的表:
| 识别码|外键1|外键_2|点击|安装|创建时间|
| - -|- -|- -|- -|- -|- -|
| 一个|01年|01年|2个|第0页|2022年11月10日|
| 2个|01年|二|五十四|十二|2022年11月10日|
| 三个|01年|01年|九个|第0页|2022年11月11日|
| 四个|01年|二|八十五|二十个|2022年11月11日|
| 五个|01年|01年|三个|一个|2022年11月12日|
| 六个|01年|二|八个|第0页|2022年11月12日|
| 七个|01年|01年|六个|第0页|2022年11月13日|
| 八个|01年|二|二百二十一|六十|2022年11月13日|
| 九个|01年|01年|六十一|10个|2022年11月14日|
| 10个|01年|二|七十五|十七岁|2022年11月14日|
| 十一|01年|01年|五十八|八个|2022年11月15日|
| 十二|01年|二|九个|第0页|2022年11月15日|
| 十三|01年|01年|10个|一个|2022年11月16日|
| 十四|01年|二|二十五个|第0页|2022年11月16日|
如何根据created_at日期选择每对唯一的foreign_key_1和foreign_key_2的最近5行?这可能吗?
我尝试过分区和分组,但我在编写mySQL语法和复杂查询方面是个初学者,所以我一直无法弄清楚。

rdrgkggo

rdrgkggo1#

一种可能的解决方案是使用row_number()窗口函数,其中您按foreign_key_1foreign_key_2进行分区,并按created_at以降序对分区进行排序:

with row_nums as (
  select
    *,
    row_number() over (
      partition by foreign_key_1, foreign_key_2 order by created_at desc
    ) as rn
  from your_table
)

select *
from row_nums
where rn <= 5

相关问题