0

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

当我做 :

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

4

1 回答 1

1

如果你只想要最新的start_dateper 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)以外的列进行排序,那么另一个选项是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
于 2020-04-20T09:03:02.767 回答