Sql 选择左连接的第一行

Sql 选择左连接的第一行,sql,postgresql,klipfolio,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_premiu

我想做一个左连接。但我只想要联接表的第一行

当我这样做时:

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
中使用此请求。如果您只想获得每个
参考文件的最新
开始日期,可以使用聚合:

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
这保证了每个
引用只能获得一行

如果您希望从
合同中获得更多的列,或者如果您希望按
开始日期以外的列进行排序(可能,您希望在
处创建
),则另一个选项是
上有区别:

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