-2

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

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

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

我的方法是

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

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

4

1 回答 1

0

只需使用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 扩展,它返回括号中键遇到的第一行,它必须是order by. “First”基于后续order by键。

于 2021-03-23T02:03:24.210 回答