首页 > 解决方案 > 如何从 MySql 表中获取唯一记录

问题描述

我有一个 mysql 表,其中包含以下字段。“图像 id、日期、媒体名称、媒体类型、速率、价值、部门、类别、客户和产品”。该表包含大约 5 百万条记录。每个媒体 ID 有多个记录。我们想提取表中复制的每个 media_id 的第一条记录。第一条记录基本上意味着我们使用日期字段为每个特定的 image_id 仅复制一条记录的数据。为了更清楚地说明这一点,请查看下面链接中的数据屏幕截图。在屏幕截图中,您可以从包含 5 百万条记录的原始数据表中看到 5 条记录的样本。在这些记录下面,你可以看到查询的实际结果,是两条记录。我们尝试了几个查询,但我们总是得到相同 image_id 的多条记录。有什么想法吗?

数据截图

标签: mysql

解决方案


如果 MySQL 8,您可以使用带有 over 子句的 row_number 函数。按日期提取每个 image_id 订单的第一条记录(ord=1)的查询如下:

select * from
  (select *,
   row_number() over(partition by image_id order by date) as ord from Original_Table) a
where ord=1

但是,我不确定在 500 万条记录的情况下您能否获得足够的性能。


推荐阅读