Select LEFT JOIN 的第一行

Select the first row of a LEFT JOIN

我正在尝试进行左连接。但我只想要加入的第一行 table.

当我这样做时:

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 中使用此请求。

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

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),那么另一个选项是distinct on:

select distinct on (c.reference) c.reference, cp.start_date, cp.created_at
from contracts c
left join contracts_premiums cp on cp.contract_id = c.cid
order by c.reference, cp.created_at desc