我正在尝试进行左联接。但是我只想要联接表的第一行。
我这样做时:
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
中使用此请求。
答案 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