选择左联接的第一行

时间:2020-04-20 08:57:19

标签: sql postgresql klipfolio

我正在尝试进行左联接。但是我只想要联接表的第一行。

我这样做时:

SELECT DISTINCT
  c.reference
FROM contracts as c

输出:7400行

但是当我尝试进行左联接时,我有很多重复项。

我已经尝试只获取第一行,但它不起作用。这是我的代码:

SELECT DISTINCT
  c.reference,
  contract_premiums.start_date
FROM contracts as c
LEFT OUTER JOIN contract_premiums ON contract_premiums.contract_id=(
  SELECT contract_id FROM contract_premiums
  WHERE contract_premiums.contract_id = c.id
  ORDER BY contract_premiums.created_at ASC 
  LIMIT 1)

输出:11500行


请注意Postgresql中的数据库,而我正在klipfolio中使用此请求。

1 个答案:

答案 0 :(得分:1)

如果只想每个start_date使用最新的reference,则可以使用聚合:

select c.reference, max(cp.start_date) max_start_date
from contracts c
left join contracts_premiums cp on cp.contract_id = c.id
group by c.reference

这样可以保证每个reference仅获得一行。

如果您想从contracts_premiums中获得更多列,或者要按start_date以外的其他列进行排序(可能是created_at来代替),那么另一个选择是{{ 1}}:

distinct on