为客户购买的第一件商品加入时间戳为 YEAR 的 2 个表

Joining 2 tables with a timestamp of YEAR for the first item purchased by customer

我有 2 table 个“项目”和“客户”。

在两个 table 中,都存在“customer_id”并且单个客户可以拥有超过 1 件商品。在“项目”table 中,还有一个名为“date_created”的时间戳字段,用于购买项目。

我想构建一个查询,可以 return 每个 customer_id 和 item_id 与每个客户在特定年份购买的第一件商品相关联,比如说 2020 年。

我的方法是

SELECT customer_id, items
INNER JOIN items ON items.customer_id=customers.customer_id

然后尝试使用 EXTRACT 函数处理每个客户在 2020 年购买的第一件商品,但我似乎无法仅提取特定年份的第一件商品。我真的很感激一些帮助。 我正在使用 PostgreSQL。谢谢。

只需使用distinct on:

select distinct on (customer_id) i.*
from items i
where date_created >= date '2020-01-01' and
      date_created < date '2021-01-01'
order by customer_id, date_created;

首先,请注意直接日期比较的使用。这使得优化器更容易选择最佳执行计划。

distinct on 是一个方便的 Postgres 扩展,returns 第一行遇到的括号中的键必须是 order by 中的第一个键。 “第一个”是基于随后的 order by 个键。